Поэтому, когда я загружаю свое приложение в эмуляторе в студии android и выбираю опцию «Войти через Facebook» или «Войти через электронную почту», тогда я не вижу информацию о пользователе, отображаемую на моем mainactivity . Информация реализована в firebase auth, и просматривается только второе время входа в систему? Это происходит только после переустановки приложения и первого входа в систему.
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private static int RC_SIGN_IN = 1337;
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
FirebaseFirestore firebaseFirestore= FirebaseFirestore.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<AuthUI.IdpConfig> providers = Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.FacebookBuilder().build());
startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().setLogo(R.drawable.menolonely).setAvailableProviders(providers).build(), RC_SIGN_IN);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN){
IdpResponse response = IdpResponse.fromResultIntent(data);
if(resultCode == RESULT_OK){
if (user != null) {
Log.d(TAG, user.getUid());
((TextView)findViewById(R.id.userId)).setText(user.getUid());
DocumentReference documentReference = firebaseFirestore.collection("users").document(user.getUid());
Map<String, Object> userMap = new HashMap<>();
userMap.put("fname", user.getDisplayName());
userMap.put("email", user.getEmail());
documentReference.set(userMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "onSuccess: user profile is created for "+ user.getUid());
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: "+ e.toString());
}
});
for (UserInfo userInfo : user.getProviderData()) {
if (userInfo.getProviderId().equals("facebook.com")) {
Log.d("TAG", "User is signed in with Facebook");
String photoUrl = user.getPhotoUrl().toString();
photoUrl = photoUrl + "?height=500";
Picasso.with(this).load(photoUrl).into((ImageView)findViewById(R.id.picture));
}else{
ImageView imV = findViewById(R.id.picture);
imV.setImageResource(R.drawable.pbstd);
}
}
}
}else{
Log.d(TAG, response.getError().getMessage());
}
}
}
}
Не удается найти проблему?
1. EDIT : выглядит как protected void onActivityResult (int requestCode, int resultCode, @Nullable Intent data) не запускается в первый раз после установки.
2. EDIT : Таким образом, он запускает OnActivityResult , но пользователь null , поэтому оператор if (user! = Null) не выполняется. Так FirebaseUser user = FirebaseAuth.getInstance (). GetCurrentUser (); возвращает ноль в первый раз.
ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ НА МОЙ ВОПРОС:
Так что FirebaseAuth.getInstance (). GetCurrentUser () возвращает значение null при первой установке приложения на эмуляторе, в результате оператор if не запустится. Если я закрою и открою свое приложение, User = FirebaseAuth.getInstance (). GetCurrentUser () больше не будет иметь значение null, и все будет работать. Так почему же это так?
Нашли решение, но это нормально?:
Итак, я переехал FirebaseUser user = FirebaseAuth.getInstance (). GetCurrentUser ( ); , прямо перед оператором if - if (user! = Null) , и это решает мою проблему.