Android - get facebook profile picture

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

    Simply use Picasso. Add Picasso Library and then use this simple line code:

    userpicture = (ImageView) row.findViewById(R.id.postuserid);
    
    Picasso.with(context)
           .load("https://graph.facebook.com/" + userID+ "/picture?type=large")
           .into(userpicture);
    
    0 讨论(0)
  • 2020-12-12 15:28
    imgUrl = "https://graph.facebook.com/" + user_id + "/picture?type=large";
    

    then Picasso.with(getApplicationContext()).load(imgUrl).into(imageView);

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

    You have to call GraphRequest API for getting URL of current Profile Picture.

    Bundle params = new Bundle();
    params.putString("fields", "id,email,picture.type(large)");
    new GraphRequest(AccessToken.getCurrentAccessToken(), "me", params, HttpMethod.GET,
            new GraphRequest.Callback() {
                @Override
                public void onCompleted(GraphResponse response) {
                    if (response != null) {
                        try {
                            JSONObject data = response.getJSONObject();
                            if (data.has("picture")) {
                                String profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
                                Bitmap profilePic = BitmapFactory.decodeStream(profilePicUrl.openConnection().getInputStream());
                                // set profilePic bitmap to imageview
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
    }).executeAsync();
    

    I hope it helps!

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

    Download the source code from here

    Add this dependency:

    compile 'com.facebook.android:facebook-android-sdk:4.0.1'
    

    activity_main.xml

    <LinearLayout android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
    
        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:id="@+id/iv_image"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:layout_gravity="center_horizontal"
            android:src="@drawable/profile"/>
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:text="Name"
                android:gravity="center_vertical"
                android:textSize="15dp"
                android:textColor="#000000"
    
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"/>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:text="Name"
                android:textSize="15dp"
                android:id="@+id/tv_name"
                android:gravity="center_vertical"
                android:textColor="#000000"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"/>
    
        </LinearLayout>
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Email"
            android:gravity="center_vertical"
            android:textSize="15dp"
            android:layout_below="@+id/tv_name"
            android:textColor="#000000"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_below="@+id/tv_name"
            android:text="Email"
            android:gravity="center_vertical"
            android:textSize="15dp"
            android:id="@+id/tv_email"
            android:textColor="#000000"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
            <TextView
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:text="DOB"
                android:gravity="center_vertical"
                android:textSize="15dp"
                android:textColor="#000000"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"/>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:layout_below="@+id/tv_name"
                android:text="DOB"
                android:gravity="center_vertical"
                android:textSize="15dp"
                android:id="@+id/tv_dob"
                android:layout_toRightOf="@+id/tv_email"
                android:textColor="#000000"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"/>
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
            <TextView
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:text="Location"
                android:gravity="center_vertical"
                android:textSize="15dp"
                android:textColor="#000000"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"/>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:layout_below="@+id/tv_name"
                android:text="location"
                android:gravity="center_vertical"
                android:textSize="15dp"
                android:id="@+id/tv_location"
                android:textColor="#000000"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"/>
        </LinearLayout>
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:background="#6585C8"
            android:id="@+id/ll_facebook"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="40dp"
            android:layout_height="50dp">
    
            <ImageView
                android:layout_width="50dp"
                android:src="@drawable/facebook"
                android:id="@+id/iv_facebook"
                android:layout_height="50dp" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Login with Facebook"
                android:textSize="20dp"
                android:textColor="#FFFFFF"
                android:textStyle="bold"
                android:id="@+id/tv_facebook"
                android:layout_marginLeft="20dp"
                android:gravity="center"
                android:layout_gravity="center"
    
                />
    
        </LinearLayout>
    
        </LinearLayout>
    

    MainActivity.java

    package facebooklocation.facebooklocation;
    
    import android.content.Intent;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.Signature;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Base64;
    import android.util.Log;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import com.bumptech.glide.Glide;
    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.HttpMethod;
    import com.facebook.login.LoginManager;
    import com.facebook.login.LoginResult;
    import org.json.JSONObject;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        CallbackManager callbackManager;
        ImageView iv_image, iv_facebook;
        TextView tv_name, tv_email, tv_dob, tv_location, tv_facebook;
        LinearLayout ll_facebook;
        String str_facebookname, str_facebookemail, str_facebookid, str_birthday, str_location;
        boolean boolean_login;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            init();
            getKeyHash();
            listener();
        }
    
    
        private void init() {
            iv_image = (ImageView) findViewById(R.id.iv_image);
            iv_facebook = (ImageView) findViewById(R.id.iv_facebook);
            tv_name = (TextView) findViewById(R.id.tv_name);
            tv_email = (TextView) findViewById(R.id.tv_email);
            tv_dob = (TextView) findViewById(R.id.tv_dob);
            tv_location = (TextView) findViewById(R.id.tv_location);
            tv_facebook = (TextView) findViewById(R.id.tv_facebook);
            ll_facebook = (LinearLayout) findViewById(R.id.ll_facebook);
            FacebookSdk.sdkInitialize(this.getApplicationContext());
        }
    
        private void listener() {
            tv_facebook.setOnClickListener(this);
            ll_facebook.setOnClickListener(this);
            iv_facebook.setOnClickListener(this);
    
        }
    
        private void facebookLogin() {
            callbackManager = CallbackManager.Factory.create();
            LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    Log.e("ONSUCCESS", "User ID: " + loginResult.getAccessToken().getUserId()
                            + "\n" + "Auth Token: " + loginResult.getAccessToken().getToken()
                    );
                    GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
                            new GraphRequest.GraphJSONObjectCallback() {
                                @Override
                                public void onCompleted(JSONObject object, GraphResponse response) {
                                    try {
    
                                        boolean_login = true;
                                        tv_facebook.setText("Logout from Facebook");
    
                                        Log.e("object", object.toString());
                                        str_facebookname = object.getString("name");
    
                                        try {
                                            str_facebookemail = object.getString("email");
                                        } catch (Exception e) {
                                            str_facebookemail = "";
                                            e.printStackTrace();
                                        }
    
                                        try {
                                            str_facebookid = object.getString("id");
                                        } catch (Exception e) {
                                            str_facebookid = "";
                                            e.printStackTrace();
    
                                        }
    
    
                                        try {
                                            str_birthday = object.getString("birthday");
                                        } catch (Exception e) {
                                            str_birthday = "";
                                            e.printStackTrace();
                                        }
    
                                        try {
                                            JSONObject jsonobject_location = object.getJSONObject("location");
                                            str_location = jsonobject_location.getString("name");
    
                                        } catch (Exception e) {
                                            str_location = "";
                                            e.printStackTrace();
                                        }
    
                                        fn_profilepic();
    
                                    } catch (Exception e) {
    
                                    }
                                }
                            });
                    Bundle parameters = new Bundle();
                    parameters.putString("fields", "id, name, email,gender,birthday,location");
    
                    request.setParameters(parameters);
                    request.executeAsync();
                }
    
                @Override
                public void onCancel() {
                    if (AccessToken.getCurrentAccessToken() == null) {
                        return; // already logged out
                    }
                    new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
                            .Callback() {
                        @Override
                        public void onCompleted(GraphResponse graphResponse) {
                            LoginManager.getInstance().logOut();
                            LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile,email"));
                            facebookLogin();
    
                        }
                    }).executeAsync();
    
    
                }
    
                @Override
                public void onError(FacebookException e) {
                    Log.e("ON ERROR", "Login attempt failed.");
    
    
                    AccessToken.setCurrentAccessToken(null);
                    LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile,email,user_birthday"));
                }
            });
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            try {
                callbackManager.onActivityResult(requestCode, resultCode, data);
            } catch (Exception e) {
    
            }
    
        }
    
        private void getKeyHash() {
            // Add code to print out the key hash
            try {
                PackageInfo info = getPackageManager().getPackageInfo("facebooklocation.facebooklocation", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
            } catch (PackageManager.NameNotFoundException e) {
    
            } catch (NoSuchAlgorithmException e) {
    
            }
        }
    
        private void fn_profilepic() {
    
            Bundle params = new Bundle();
            params.putBoolean("redirect", false);
            params.putString("type", "large");
            new GraphRequest(
                    AccessToken.getCurrentAccessToken(),
                    "me/picture",
                    params,
                    HttpMethod.GET,
                    new GraphRequest.Callback() {
                        public void onCompleted(GraphResponse response) {
    
                            Log.e("Response 2", response + "");
    
                            try {
                                String str_facebookimage = (String) response.getJSONObject().getJSONObject("data").get("url");
                                Log.e("Picture", str_facebookimage);
    
                                Glide.with(MainActivity.this).load(str_facebookimage).skipMemoryCache(true).into(iv_image);
    
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
    
                            tv_name.setText(str_facebookname);
                            tv_email.setText(str_facebookemail);
                            tv_dob.setText(str_birthday);
                            tv_location.setText(str_location);
    
                        }
                    }
            ).executeAsync();
        }
    
    
        @Override
        public void onClick(View view) {
    
            if (boolean_login) {
                boolean_login = false;
                LoginManager.getInstance().logOut();
                tv_location.setText("");
                tv_dob.setText("");
                tv_email.setText("");
                tv_name.setText("");
                Glide.with(MainActivity.this).load(R.drawable.profile).into(iv_image);
                tv_facebook.setText("Login with Facebook");
            } else {
                LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile,email,user_birthday,user_location"));
                facebookLogin();
            }
    
    
        }
    
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            LoginManager.getInstance().logOut();
        }
    }
    
    0 讨论(0)
  • 2020-12-12 15:36

    I think problem is in the

    imageURL = "**http**://graph.facebook.com/"+userID+"/picture?type=large";
    

    Use https insted of http

    0 讨论(0)
  • 2020-12-12 15:36
    private void importFbProfilePhoto() {
    
        if (AccessToken.getCurrentAccessToken() != null) {
    
            GraphRequest request = GraphRequest.newMeRequest(
                    AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject me, GraphResponse response) {
    
                            if (AccessToken.getCurrentAccessToken() != null) {
    
                                if (me != null) {
    
                                    String profileImageUrl = ImageRequest.getProfilePictureUri(me.optString("id"), 500, 500).toString();
                                    Log.i(LOG_TAG, profileImageUrl);
    
                                }
                            }
                        }
                    });
            GraphRequest.executeBatchAsync(request);
        }
    }
    
    0 讨论(0)
提交回复
热议问题