2017-10-20 21 views
0

J'essaie d'ajouter une connexion facebook dans une application Android. Fait avec succès à la suite de ce tutoriel https://www.studytutorial.in/android-facebook-integration-and-login-tutorial. Il contient deux activités MainActivity, UserProfileActivity. MainActivity est le lanceur d'applications, avec le bouton de connexion. Après les informations d'identification correctes, UserProfileActivity est appelé via l'intention, il a sa propre mise en page xml, il affiche donc User Profile Pic, nom et email.Comment afficher la photo de profil Facebook après vous être connecté?

Après avoir appuyé sur le bouton de retour, retournez à MainActivity --- L'affichage résultant est le texte de loginButton modifié en bouton de déconnexion. Après avoir cliqué sur le bouton de déconnexion, la déconnexion est exécutée, mais lorsque vous vous reconnectez, il est indiqué "Vous êtes déjà connecté avec some_user_name." Avec le bouton continuer et annuler

Donc, ma question est, comment effacer les détails de connexion précédents. , comment montrer la photo de profil comme ImageView de MainActivity (juste au-dessus loginButton)?

Voici mon MainActivity

public class MainActivity extends AppCompatActivity { 
CallbackManager callbackManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    callbackManager = CallbackManager.Factory.create(); 
    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); 
    loginButton.setReadPermissions("email"); 
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      getUserDetails(loginResult); 
     } 
     @Override 
     public void onCancel() { 
      Log.d("LOGIN_CANCEL", "Cancel"); 
     } 
     @Override 
     public void onError(FacebookException error) { 
      Log.d("LOGIN_ERROR", "Error"); 
     } 
    }); 
} 
protected void getUserDetails(LoginResult loginResult) { 
    GraphRequest data_request = GraphRequest.newMeRequest(loginResult.getAccessToken(), 
     new GraphRequest.GraphJSONObjectCallback() { 
     @Override 
     public void onCompleted(JSONObject json_object, GraphResponse response) { 
      Intent intent = new Intent(MainActivity.this, UserProfileActivity.class); 
      intent.putExtra("userProfile", json_object.toString()); 
      startActivity(intent); 
     } 
    }); 
    Bundle permission_param = new Bundle(); 
    permission_param.putString("fields", "id, name, email, picture.width(120).height(120)"); 
    data_request.setParameters(permission_param); 
    data_request.executeAsync(); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 

Voici mon UserProfileActivity

public class UserProfileActivity extends AppCompatActivity implements View.OnClickListener { 
JSONObject response, profile_pic_data, profile_pic_url; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_user_profile); 
    Intent intent = getIntent(); 
    String jsondata = intent.getStringExtra("userProfile"); 
    Log.w("Jsondata", jsondata); 
    ImageView user_picture = (ImageView) findViewById(R.id.profilePic); 
    TextView user_name = (TextView) findViewById(R.id.UserName); 
    TextView user_email = (TextView) findViewById(R.id.email); 
    Button backButton = (Button) findViewById(R.id.backbutton); 
    backButton.setOnClickListener(this); 
    try { 
     response = new JSONObject(jsondata); 
     user_email.setText(response.get("email").toString()); 
     user_name.setText(response.get("name").toString()); 
     profile_pic_data = new JSONObject(response.get("picture").toString()); 
     profile_pic_url = new JSONObject(profile_pic_data.getString("data")); 
     Picasso.with(this).load(profile_pic_url.getString("url")).into(user_picture); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+0

utilisez 'ProfilePictureView' – grant

Répondre

0

Vous devez appeler le pic de profil à l'aide ID avec l'URL externe comme celui-ci

String  sfacebookId = json_object.getString("id"); 
try { 
URL image_url = new URL("https://graph.facebook.com/" + sfacebookId + "/picture?type=large"); 
user_image = image_url.toString(); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
0
loginButton.setReadPermissions("email"); 

remplacer par

loginButton.setReadPermissions("public_profile", "email"); 

et vous obtenez quand vous avez

profile_pic_data = new JSONObject(response.get("picture").toString()); 

qui représente l'URL de l'image.