Android - get facebook profile picture

后端 未结 28 2372
花落未央
花落未央 2020-12-12 15:13

I don\'t know why, but I am always getting null when I try to get the profile picture of the user. Do I need to set some specific permissions to get access?

Below is

28条回答
  •  生来不讨喜
    2020-12-12 15:40

    A complete solution which worked for me!

    import android.app.Dialog;
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.Html;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import com.facebook.AccessToken;
    import com.facebook.CallbackManager;
    import com.facebook.FacebookCallback;
    import com.facebook.FacebookException;
    import com.facebook.FacebookSdk;
    import com.facebook.GraphRequest;
    import com.facebook.GraphResponse;
    import com.facebook.login.LoginResult;
    import com.facebook.login.widget.LoginButton;
    import com.facebook.login.widget.ProfilePictureView;
    import com.facebook.share.model.ShareLinkContent;
    import com.facebook.share.widget.ShareDialog;
    
    import org.json.JSONException;
    import org.json.JSONObject;
    
    public class MainActivity extends AppCompatActivity {
        CallbackManager callbackManager;
        Button share,details;
        ShareDialog shareDialog;
        LoginButton login;
        ProfilePictureView profile;
        Dialog details_dialog;
        TextView details_txt;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            FacebookSdk.sdkInitialize(getApplicationContext());
            setContentView(R.layout.activity_main);
    
            callbackManager = CallbackManager.Factory.create();
            login = (LoginButton)findViewById(R.id.login_button);
            profile = (ProfilePictureView)findViewById(R.id.picture);
            shareDialog = new ShareDialog(this);
            share = (Button)findViewById(R.id.share);
            details = (Button)findViewById(R.id.details);
            login.setReadPermissions("public_profile email");
            share.setVisibility(View.INVISIBLE);
            details.setVisibility(View.INVISIBLE);
            details_dialog = new Dialog(this);
            details_dialog.setContentView(R.layout.dialog_details);
            details_dialog.setTitle("Details");
            details_txt = (TextView)details_dialog.findViewById(R.id.details);
            details.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    details_dialog.show();
                }
            });
    
            if(AccessToken.getCurrentAccessToken() != null){
                RequestData();
                share.setVisibility(View.VISIBLE);
                details.setVisibility(View.VISIBLE);
            }
            login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(AccessToken.getCurrentAccessToken() != null) {
                        share.setVisibility(View.INVISIBLE);
                        details.setVisibility(View.INVISIBLE);
                        profile.setProfileId(null);
                    }
                }
            });
            share.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ShareLinkContent content = new ShareLinkContent.Builder().build();
                    shareDialog.show(content);
    
                }
            });
            login.registerCallback(callbackManager, new FacebookCallback() {
                @Override
                public void onSuccess(LoginResult loginResult) {
    
                    if(AccessToken.getCurrentAccessToken() != null){
                        RequestData();
                        share.setVisibility(View.VISIBLE);
                        details.setVisibility(View.VISIBLE);
                    }
                }
    
                @Override
                public void onCancel() {
    
                }
    
                @Override
                public void onError(FacebookException exception) {
                }
            });
    
        }
        public void RequestData(){
            GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object,GraphResponse response) {
    
                    JSONObject json = response.getJSONObject();
                    try {
                        if(json != null){
                            String text = "Name : "+json.getString("name")+"

    Email : "+json.getString("email")+"

    Profile link : "+json.getString("link"); details_txt.setText(Html.fromHtml(text)); profile.setProfileId(json.getString("id")); } } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,link,email,picture"); request.setParameters(parameters); request.executeAsync(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } }

提交回复
热议问题