2016-08-09 5 views
1

Ich habe Firebase Auth in meiner Android App hinzugefügt und ich verwende Facebook und Google anmelden. Anmeldung funktioniert gut. Jetzt möchte ich Benutzerprofilinformationen aus dem Facebook- oder Google-Konto des Nutzers abrufen (je nachdem, welcher Benutzer sich anmeldet) und die Informationen in der Benutzerprofilaktivität anzeigen. Ich kann den Benutzernamen und die Benutzer-UID abrufen und anzeigen. Benutzer-E-Mail und Benutzerfoto werden jedoch nicht angezeigt, obwohl sie abgerufen wurden.Firebase Auth: Android: Benutzer E-Mail und Foto kann nicht angezeigt werden

Hier ist, wie ich Benutzerinfo bin Abrufen (LoginActivity.java):

authStateListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 

       FirebaseUser user = firebaseAuth.getCurrentUser(); 

       if (user != null) { 
        //User is signed in 

        for (UserInfo userInfo : user.getProviderData()){ 

         String user_name = userInfo.getDisplayName(); 
         String user_email = userInfo.getEmail(); 
         Uri user_img = userInfo.getPhotoUrl(); 
         String user_id = userInfo.getUid(); 

         SharedPreferences preferences = getSharedPreferences(UserInfoConstants.STRING_NAME,0); 
         SharedPreferences.Editor editor = preferences.edit(); 
         editor.putString(UserInfoConstants.KEY_USER_NAME, user_name); 
         editor.putString(UserInfoConstants.KEY_USER_EMAIL, user_email); 
         editor.putString(UserInfoConstants.KEY_USER_ID, user_id); 
         editor.putString(UserInfoConstants.KEY_USER_IMG, user_img != null ? user_img.toString() : null); 
         editor.apply(); 
        } 

       } else { 
        //User is signed out 
        return; 
       } 
      } 
     }; 

Hier ist, wie Benutzer-Info am anzeigt (ProfileActivity.java):

SharedPreferences preferences = getSharedPreferences(LoginActivity.UserInfoConstants.STRING_NAME,0); 

     String user_img_uri = preferences.getString(LoginActivity.UserInfoConstants.KEY_USER_IMG,""); 

     if (user_img_uri.isEmpty()){ 

      userImgView.setImageResource(R.drawable.com_facebook_profile_picture_blank_portrait); 
     } else { 

      userImgView.setImageBitmap(getImageBitmap(user_img_uri)); 
     } 
     userName.setText(preferences.getString(LoginActivity.UserInfoConstants.KEY_USER_NAME,"")); 
     userEmail.setText(preferences.getString(LoginActivity.UserInfoConstants.KEY_USER_EMAIL,"")); 
     userId.setText("ID: " + preferences.getString(LoginActivity.UserInfoConstants.KEY_USER_ID,"")); 

I hat viel darüber gesucht, kann aber keine Lösung für dasselbe finden.

Kann jemand helfen ????

Antwort

2

Uri Referenz ist immer null. Versuchen Sie es zu speichern, wie Zeichenfolge wie folgt:

String uri = userInfo.getPhotoUrl().toString; 

und liefern Sie es bevorzugt, dann legen Sie es wie folgt aus:

String fbImage = pref.getString("ImageUri", ""); 

if (fbImage != null && !fbImage.isEmpty()) { 
      Picasso.with(getApplicationContext()) 
        .load(fbImage) 
        .placeholder(R.drawable.img_circle_placeholder) 
        .resize(avatarSize, avatarSize) 
        .centerCrop() 
        .transform(new CircleTransformation()) 
        .into(ImageViewObject); 

     } 

Stellen Sie sicher, picasso Abhängigkeit zu Ihrem gradle hinzugefügt.

compile 'com.squareup.picasso:picasso:2.3.2' 

für EMAILID:

String email = pref.getString("email", null); 

//try to check here 
Log.w("email", ""+email); 

if(email != null && !email.isEmpty()){ 
    textEmail.setText(""+email); 
} 

oder können Sie Absicht Service verwenden, um dies ist die Arbeit sicher:

In Sie sich einloggen Aktivität:

Intent intent = new Intent(this, MainActivity.class); 
intent.putExtra("email_id", email_id); 
startActivity(intent); 
finish(); 

and in your mainActivity: 

Intent intent = getIntent(); 
String email = intent.getStringExtra("email_id"); 

textEmail.setText(""+email); 

update-2

es gibt eine Firebase-Methode .. und es ist der einfachste Weg, es zu tun.

schreiben Sie diesen Code in Ihre zweite Aktivität in dem Sie Daten retrive .. wollen

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
TextView email; 

email.setText(""+ user.getEmail()); 

gibt es keine Notwendigkeit von sharedPrefrence oder Vorsatz Service.

+0

hey. Danke für Ihre Antwort. Lass es mich versuchen. –

+0

Sie sind willkommen. –

+0

hey danke ein tonnen mann! Es funktioniert perfekt! Pls erzählen auch, wie ich E-Mail-ID des Benutzers erhalten kann. Ich erhalte die E-Mail-ID, aber sie wird nicht angezeigt. –

Verwandte Themen