2017-02-11 65 views
0

我有一個簽名活動,我正在爲我的應用使用Firebase身份驗證和Firebase用戶界面。我在登錄屏幕Google +上有兩個按鈕,另一個用於電子郵件密碼組合。Firebase android onAuthStateChanged未解僱且結果代碼爲-1總是

我有兩個問題

我的驗證狀態改變不點火,並在我的onActivityResult我的結果代碼始終是-1

當我關閉應用程序,並重新安裝/重新運行我的應用程序,我被帶到一個黑屏。

請參閱下面signinactivity

public class SigninActivity extends AppCompatActivity { 

public static final String ANONYMOUS = "anonymous"; 
public static final int RC_SIGN_IN = 1; 
private static final String TAG = "SigninActivity"; 

//private MessageAdapter mMessageAdapter; 
private ProgressBar mProgressBar; 

private String mUsername, loginUser; 

// Firebase instance variables 
private FirebaseAuth mFirebaseAuth; 
private FirebaseAuth.AuthStateListener mAuthStateListener; 
private FirebaseDatabase mFirebaseDatabase; 
private FirebaseStorage mFirebaseStorage; 
private DatabaseReference mMessagesDatabaseReference; 
private StorageReference mChatPhotosStorageReference; 
private View mLayout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mLayout = findViewById(android.R.id.content); 
    mUsername = ANONYMOUS; 
    mFirebaseDatabase = FirebaseDatabase.getInstance(); 
    // Initialize Firebase components 
    mFirebaseAuth = FirebaseAuth.getInstance(); 
    mFirebaseStorage = FirebaseStorage.getInstance(); 

    // Initialize references to views 
    mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 

    // Initialize progress bar 
    mProgressBar.setVisibility(ProgressBar.INVISIBLE); 

    mAuthStateListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser();; 
      Log.d("onAuthStateChanged", String.valueOf(user)); 
      if (user != null) { 
       if (user.getDisplayName() != null) { 
        loginUser = onSignedInInitialize(user.getDisplayName()); 
       } else { 
        loginUser = onSignedInInitialize(getString(R.string.email_user)); 
       } 
       // User is signed in 
      } else { 
       // User is signed out 
       startActivityForResult(
         AuthUI.getInstance() 
           .createSignInIntentBuilder() 
           .setProviders(
             AuthUI.EMAIL_PROVIDER, 
             AuthUI.GOOGLE_PROVIDER) 
           .setTheme(R.style.GreenTheme) 
           .build(), 
         RC_SIGN_IN); 
      } 
     } 
    }; 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mFirebaseAuth.addAuthStateListener(mAuthStateListener); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (mAuthStateListener != null) { 
     mFirebaseAuth.removeAuthStateListener(mAuthStateListener); 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == RC_SIGN_IN) { 
     Log.d("requestCode", String.valueOf(requestCode)); 
     Log.d("resultCode", String.valueOf(resultCode)); 
     Log.d("data", String.valueOf(data)); 

     if (resultCode == RESULT_OK) { 
      // Sign-in succeeded, set up the UI 
      Snackbar.make(mLayout, getString(R.string.signin_string), 
        Snackbar.LENGTH_LONG).show(); 
      Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
      startActivity(intent); 
     } else if (resultCode == RESULT_CANCELED) { 
      // Sign in was canceled by the user, finish the activity 
      Snackbar.make(mLayout, getString(R.string.signin_cancel), 
        Snackbar.LENGTH_LONG).show(); 
      finish(); 
     } 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.sign_out_menu: 
      AuthUI.getInstance().signOut(this); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

private String onSignedInInitialize(String username) { 
    if (username != null) { 
     mUsername = username; 
    } else { 
     mUsername = getString(R.string.email_sign); 
    } 
    return username; 
} 
} 

跟蹤:

我試圖調試我的代碼和requestCode爲1(如預期,但結果代碼是-1)

十月2日至11日:34:19.609 4429-4429/App_Name D/requestCode:1

02-11 10:34:19.609 4429-4429/App_Name D/resultCode:-1

+1

您的跟蹤顯示'resultCode'爲-1。該值是[Activity.RESULT_OK](https://developer.android.com/reference/android/app/Activity.html#RESULT_OK)。這意味着用'RC_SIGN_IN'的requestCode(等於1)調用'AuthUI'已成功。該活動結果的出現也意味着你的'AuthStateListener'正在觸發,因爲那是你調用'AuthUI'的地方。你能否進一步解釋問題是什麼? –

+0

問題是,當我關閉我的應用程序(在沒有退出的背景下關閉)並打開我的應用程序時,我得到一個空白屏幕 –

+1

請注意,設備上保留了成功的登錄信息,直到用戶註銷爲止。它看起來像是當用戶已經登錄時啓動SigninActivity,它會調用onSignedInInitialize(),然後執行_not_ finish()。這可能是你看到的空白畫面嗎? –

回答

0

qbix的響應幫助解決了我的問題