Android - get facebook profile picture

后端 未结 28 2313
花落未央
花落未央 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:37

    I used this code and i got the profile picture,

    fbUsrPicURL = "http://graph.facebook.com" + File.separator
                        + String.valueOf(fbUID) + File.separator + "picture?type=large";
    
    0 讨论(0)
  • 2020-12-12 15:38
    imgUrl = "https://graph.facebook.com/" + user_id + "/picture?type=large";
    

    try this

    0 讨论(0)
  • 2020-12-12 15:39

    This is probably you are run your methods in main thread use

    if( android.os.Build.VERSION.SDK_INT > 9 )
    {
      try
      {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy( policy );
      }
    }
    
    0 讨论(0)
  • check the user Id use this url

    imgurl="https://graph.facebook.com/"+user.getId()+"/picture";
    
    0 讨论(0)
  • 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<LoginResult>() {
                @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 = "<b>Name :</b> "+json.getString("name")+"<br><br><b>Email :</b> "+json.getString("email")+"<br><br><b>Profile link :</b> "+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);
        }
    
    }
    
    0 讨论(0)
  • 2020-12-12 15:41

    use the facebook ProfilePictureView instead of an Imageview

    <com.facebook.login.widget.ProfilePictureView
        android:id="@+id/friendProfilePicture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        facebook:preset_size="small"/>
    

    After that you can set facebook id like this in code

    ProfilePictureView profilePictureView;
    
    profilePictureView = (ProfilePictureView) findViewById(R.id.friendProfilePicture);
    
    profilePictureView.setProfileId(userId);
    

    it works.. also You can set the size to small/normal/large/custom for ProfilePictureView

    0 讨论(0)
提交回复
热议问题