ナビゲーションドロワーアクティビティから戻ると、アプリがクラッシュします

ライディープ

ここのチュートリアルからグーグルサインイン機能を備えたアプリを作成する方法を学んおり、navigation-drawerアクティビティから戻ろうとしたときにいくつかの問題が発生しました仕組みは、最初にGoogleSigninAcitivityユーザーがサインインするために起動されます。サインインが承認されたら、ナビゲーションドロワーアクティビティを開始しMain2Activityます。ドロワー内の特定のアイテムをクリックすると、終了Main2Activityして戻っGoogleSigninAcitivityてサインアウトに進みます。ただし、この場合、この場合はという名前のドロワーアイテムをクリックするとすぐにアプリがクラッシュしますnav_share

のコードはGoogleSigninActivity次のとおりです

package nus.is3261.kotlinapp

import android.app.Activity
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_google_signin.*
import com.google.android.gms.auth.api.Auth
import com.google.android.gms.common.api.GoogleApiClient
import com.google.firebase.auth.FirebaseAuth
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.common.ConnectionResult
import com.google.firebase.auth.FirebaseUser
import android.content.Intent
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.firebase.auth.GoogleAuthProvider

class GoogleSigninActivity : AppCompatActivity(), View.OnClickListener, GoogleApiClient.OnConnectionFailedListener {

    private val TAG = "JSAGoogleSignIn"
    private val REQUEST_CODE_SIGN_IN = 1234
    private val REQUEST_CODE_SIGN_OUT = 123
    private val WEB_CLIENT_ID = "xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com"

    private var mAuth: FirebaseAuth? = null

    private var mGoogleApiClient: GoogleApiClient? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_google_signin)

        btn_sign_in.setOnClickListener(this)
        btn_sign_out.setOnClickListener(this)
        btn_disconnect.setOnClickListener(this)

        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(WEB_CLIENT_ID)
                .requestEmail()
                .build()

        mGoogleApiClient = GoogleApiClient.Builder(this)
                .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build()

        mAuth = FirebaseAuth.getInstance()
    }

    override fun onStart() {
        super.onStart()

        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = mAuth!!.currentUser
        updateUI(currentUser)
    }

    override fun onClick(v: View?) {
        val i = v!!.id

        when (i) {
            R.id.btn_sign_in -> signIn()
            R.id.btn_sign_out -> signOut()
            R.id.btn_disconnect -> revokeAccess()
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent();
        if (requestCode == REQUEST_CODE_SIGN_IN) {
            val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
            if (result.isSuccess) {
                // successful -> authenticate with Firebase
                val account = result.signInAccount
                firebaseAuthWithGoogle(account!!)
            } else {
                // failed -> update UI
                updateUI(null)
                Toast.makeText(applicationContext, "SignIn: failed!",
                        Toast.LENGTH_SHORT).show()
            }
        } else if ((requestCode == REQUEST_CODE_SIGN_OUT)&&(resultCode == Activity.RESULT_OK)){
            mGoogleApiClient?.connect()
            signOut()
        }
    }

    private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) {
        Log.e(TAG, "firebaseAuthWithGoogle():" + acct.id!!)

        val credential = GoogleAuthProvider.getCredential(acct.idToken, null)
        mAuth!!.signInWithCredential(credential)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        // Sign in success
                        Log.e(TAG, "signInWithCredential: Success!")
                        val user = mAuth!!.currentUser
                        updateUI(user)
                    } else {
                        // Sign in fails
                        Log.w(TAG, "signInWithCredential: Failed!", task.exception)
                        Toast.makeText(applicationContext, "Authentication failed!",
                                Toast.LENGTH_SHORT).show()
                        updateUI(null)
                    }
                }
    }

    override fun onConnectionFailed(connectionResult: ConnectionResult) {
        Log.e(TAG, "onConnectionFailed():" + connectionResult);
        Toast.makeText(applicationContext, "Google Play Services error.", Toast.LENGTH_SHORT).show();
    }

    private fun signIn() {
        val intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
        startActivityForResult(intent, REQUEST_CODE_SIGN_IN)
    }

    private fun signOut() {
        // sign out Firebase
        mAuth!!.signOut()

        // sign out Google
        Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback { updateUI(null) }
    }

    private fun revokeAccess() {
        // sign out Firebase
        mAuth!!.signOut()

        // revoke access Google
        Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback { updateUI(null) }
    }

    private fun updateUI(user: FirebaseUser?) {
        if (user != null) {
            val myIntent = Intent(this, Main2Activity::class.java)
            startActivityForResult(myIntent, REQUEST_CODE_SIGN_OUT)
//            tvStatus.text = "Google User email: " + user.email!!
//            tvDetail.text = "Firebase User ID: " + user.uid

//            btn_sign_in.visibility = View.GONE
//            layout_sign_out_and_disconnect.visibility = View.VISIBLE
        } else {
            tvStatus.text = "Signed Out"
            tvDetail.text = null

            btn_sign_in.visibility = View.VISIBLE
            layout_sign_out_and_disconnect.visibility = View.GONE
        }
    }

}

ここから私はここに戻りMain2Activityます:

override fun onNavigationItemSelected(item: MenuItem): Boolean {
    // Handle navigation view item clicks here.
    when (item.itemId) {
        R.id.nav_basics -> {
            basicFragment()
        }
        R.id.nav_loops -> {
            loopFragment()
        }
        R.id.nav_functions -> {
            functionFragment()
        }
        R.id.nav_chart -> {

        }
        R.id.nav_share -> {
            signOut()
            return true
        }
    }

    drawer_layout.closeDrawer(GravityCompat.START)
    return true
}

fun signOut(){
    drawer_layout.closeDrawer(GravityCompat.START)
    val myIntent = Intent()
    myIntent.putExtra("SignOut", "SignOut")
    setResult(Activity.RESULT_OK, myIntent)
    finish()
}

何かおかしなことをしているような気がしますが、どこにエラーがあるのか​​わからないようです。クリックするとすぐに表示されるlogcatエラーは次のとおりnav_shareです。切り取られた単語が言っていますGoogleApiCliet is not connected yet

ここに画像の説明を入力してください

Vikash Bijarniya

他のアクティビティに移動してから、以下のコードを呼び出しています

drawer_layout.closeDrawer(GravityCompat.START)

ただし、最初にこのコードを実行してから、リダイレクトに進む必要があります。この背後にある理由は、すでに別のアクティビティにリダイレクトしている場合、drawer_layoutがnullとして取得されるためです。それが役に立てば幸い

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ギャラリーから画像を選択し、特定のアクティビティの画像ビューと別のアクティビティのナビゲーションドロワーの画像ビューにロードします

分類Dev

フラグメントであるメニュー項目のスイッチケースがあるマテリアルナビゲーションドロワーからアクティビティを開始します

分類Dev

ナビゲーションドロワーのアイテムをクリックすると、誤ったアクティビティが開きます

分類Dev

ボタンがクリックされたときにナビゲーションドロワーアクティビティを開始します

分類Dev

ナビゲーションドロワーアクティビティのURLからポップアップウィンドウに画像を追加する方法

分類Dev

ナビゲーションドロワーを使用したアクティビティから相対レイアウトのAndroidを使用したアクティビティに渡すときにエラーが発生しました

分類Dev

ナビゲーション ドロワーのアクティビティを接続するときにエラーが発生しました

分類Dev

ナビゲーションドロワーを使用したスプラッシュ画面アクティビティの追加が機能しない

分類Dev

ナビゲーションドロワーのリストビューアイテムをクリックすると、クリックされていないアクティビティが毎回開きます

分類Dev

別のアクティビティでURIからナビゲーションドロワービューアの画像を設定する方法

分類Dev

アクティビティを変更すると、ナビゲーション ドロワーが間違ってチェックされます

分類Dev

ナビゲーションドロワーから別のアクティビティに移動したい

分類Dev

アクティビティからブロードキャストレシーバーに値を渡そうとすると、アプリケーションがクラッシュします

分類Dev

ナビゲーションドロワーアイテムで、ポップアップウィンドウをクリックします

分類Dev

あるアクティビティから別のアクティビティにデータを渡すことはできますが、アプリケーションがクラッシュします

分類Dev

ナビゲーション ドロワーを複数のアクティビティと共有する

分類Dev

基本的なナビゲーションドロワーアクティビティの引数を更新します

分類Dev

フェッチしたプロフィール写真をナビゲーションドロワーアクティビティに表示する

分類Dev

ナビゲーションドロワーアクティビティがコンテンツと重複しています

分類Dev

ナビゲーションドロワーアクティビティと空のアクティビティの違いは何ですか

分類Dev

マテリアルデザインを使用して、プログラムがランチャーアクティビティから別のアクティビティに移行するとアプリがクラッシュする

分類Dev

ナビゲーションドロワーアイテムのクリックでアクティビティに移動する方法

分類Dev

履歴からアクティビティをクリアすると、アプリケーションがアンロードされます

分類Dev

Opencvandroidアプリケーションが新しいアクティビティでクラッシュする

分類Dev

アプリケーションがバックグラウンドプロセスからiOSのアクティブプロセスに移行するときに、編集可能なアラートビューを表示します

分類Dev

AndroidのGoogleマップナビゲーションが最近のアクティビティに戻らない

分類Dev

Android-ナビゲーションドロワーのタイトルをメインアクティビティから移動します

分類Dev

グーグルマップアクティビティのナビゲーションドロワー

分類Dev

ナビゲーションドロワービューでonBackPressedを使用してメインアクティビティに移動します

Related 関連記事

  1. 1

    ギャラリーから画像を選択し、特定のアクティビティの画像ビューと別のアクティビティのナビゲーションドロワーの画像ビューにロードします

  2. 2

    フラグメントであるメニュー項目のスイッチケースがあるマテリアルナビゲーションドロワーからアクティビティを開始します

  3. 3

    ナビゲーションドロワーのアイテムをクリックすると、誤ったアクティビティが開きます

  4. 4

    ボタンがクリックされたときにナビゲーションドロワーアクティビティを開始します

  5. 5

    ナビゲーションドロワーアクティビティのURLからポップアップウィンドウに画像を追加する方法

  6. 6

    ナビゲーションドロワーを使用したアクティビティから相対レイアウトのAndroidを使用したアクティビティに渡すときにエラーが発生しました

  7. 7

    ナビゲーション ドロワーのアクティビティを接続するときにエラーが発生しました

  8. 8

    ナビゲーションドロワーを使用したスプラッシュ画面アクティビティの追加が機能しない

  9. 9

    ナビゲーションドロワーのリストビューアイテムをクリックすると、クリックされていないアクティビティが毎回開きます

  10. 10

    別のアクティビティでURIからナビゲーションドロワービューアの画像を設定する方法

  11. 11

    アクティビティを変更すると、ナビゲーション ドロワーが間違ってチェックされます

  12. 12

    ナビゲーションドロワーから別のアクティビティに移動したい

  13. 13

    アクティビティからブロードキャストレシーバーに値を渡そうとすると、アプリケーションがクラッシュします

  14. 14

    ナビゲーションドロワーアイテムで、ポップアップウィンドウをクリックします

  15. 15

    あるアクティビティから別のアクティビティにデータを渡すことはできますが、アプリケーションがクラッシュします

  16. 16

    ナビゲーション ドロワーを複数のアクティビティと共有する

  17. 17

    基本的なナビゲーションドロワーアクティビティの引数を更新します

  18. 18

    フェッチしたプロフィール写真をナビゲーションドロワーアクティビティに表示する

  19. 19

    ナビゲーションドロワーアクティビティがコンテンツと重複しています

  20. 20

    ナビゲーションドロワーアクティビティと空のアクティビティの違いは何ですか

  21. 21

    マテリアルデザインを使用して、プログラムがランチャーアクティビティから別のアクティビティに移行するとアプリがクラッシュする

  22. 22

    ナビゲーションドロワーアイテムのクリックでアクティビティに移動する方法

  23. 23

    履歴からアクティビティをクリアすると、アプリケーションがアンロードされます

  24. 24

    Opencvandroidアプリケーションが新しいアクティビティでクラッシュする

  25. 25

    アプリケーションがバックグラウンドプロセスからiOSのアクティブプロセスに移行するときに、編集可能なアラートビューを表示します

  26. 26

    AndroidのGoogleマップナビゲーションが最近のアクティビティに戻らない

  27. 27

    Android-ナビゲーションドロワーのタイトルをメインアクティビティから移動します

  28. 28

    グーグルマップアクティビティのナビゲーションドロワー

  29. 29

    ナビゲーションドロワービューでonBackPressedを使用してメインアクティビティに移動します

ホットタグ

アーカイブ