Android – 获取脸谱资料图片

我不知道为什么,但是当我尝试获取用户的个人资料图片时,我总是变得空白。 我是否需要设置一些特定的权限才能访问?

以下是我的方法:

public static Bitmap getFacebookProfilePicture(String userID) throws SocketException, SocketTimeoutException, MalformedURLException, IOException, Exception { String imageURL; Bitmap bitmap = null; imageURL = "http://graph.facebook.com/"+userID+"/picture?type=large"; InputStream in = (InputStream) new URL(imageURL).getContent(); bitmap = BitmapFactory.decodeStream(in); return bitmap; } Bitmap bitmap = getFacebookProfilePicture(userId); 

我得到空。 我不知道为什么? 任何帮助是可观的。

这应该工作:

 public static Bitmap getFacebookProfilePicture(String userID){ URL imageURL = new URL("https://graph.facebook.com/" + userID + "/picture?type=large"); Bitmap bitmap = BitmapFactory.decodeStream(imageURL.openConnection().getInputStream()); return bitmap; } Bitmap bitmap = getFacebookProfilePicture(userId); 

编辑:

正如@dvpublic在评论中所build议的那样 ,图像没有被下载的问题通过“https”被“http”所固定。

使用facebook ProfilePictureView而不是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"/> 

之后,你可以在代码中设置这样的Facebook标识

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

它的工作..也可以设置大小为ProfilePictureView小/正常/大/自定义

只需使用毕加索。 添加毕加索图书馆,然后使用这个简单的行代码:

 userpicture = (ImageView) row.findViewById(R.id.postuserid); Picasso.with(context) .load("https://graph.facebook.com/" + userID+ "/picture?type=large") .into(userpicture); 

您必须调用GraphRequest API来获取当前configuration文件图片的URL。

 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(); 

我希望它有帮助!

获取个人资料图片url的最佳方法

 int dimensionPixelSize = getResources().getDimensionPixelSize(com.facebook.R.dimen.com_facebook_profilepictureview_preset_size_large); Uri profilePictureUri= Profile.getCurrentProfile().getProfilePictureUri(dimensionPixelSize , dimensionPixelSize); 

要么

 Uri profilePictureUri = ImageRequest.getProfilePictureUri(Profile.getCurrentProfile().getId(), dimensionPixelSize , dimensionPixelSize ); 

使用滑动显示图像

 Glide.with(this).load(profilePictureUri) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(profilePictureView); 

没有更多的硬编码的string

我总是收到一个响应,说明FACEBOOK_NON_JSON_RESULT 。 所以回头看看Facebook的graphicsAPI浏览器,我注意到一个checkbox,检查标签redirect。 一些谷歌search显示我需要提供一个参数给我的GraphRequest ,不允许redirect。 因此,正确的要求必须是:

  Bundle params = new Bundle(); params.putBoolean("redirect", false); new GraphRequest( AccessToken.getCurrentAccessToken(), "me/picture", params, HttpMethod.GET, new GraphRequest.Callback() { public void onCompleted(GraphResponse response) { try { String picUrlString = (String) response.getJSONObject().getJSONObject("data").get("url"); //Load picture url in imageView Glide.with(this).load(picUrlString).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(profilePictureView); } catch (JSONException | IOException e) { e.printStackTrace(); } } } ).executeAsync(); 

检查用户ID使用这个url

 imgurl="https://graph.facebook.com/"+user.getId()+"/picture"; 
 imgUrl = "https://graph.facebook.com/" + user_id + "/picture?type=large"; 

然后Picasso.with(getApplicationContext()).load(imgUrl).into(imageView);

我觉得问题在于

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

使用https insted的http

 imgUrl = "https://graph.facebook.com/" + user_id + "/picture?type=large"; 

尝试这个

 Bundle bundle = new Bundle(); bundle.putString ("fields", "full_picture,message"); new GraphRequest( AccessToken.getCurrentAccessToken(), "{page-id}/feed", bundle, HttpMethod.GET, new GraphRequest.Callback() { public void onCompleted(GraphResponse response) { /* handle the result */ Log.e("TAG", response.toString()); } } ).executeAsync(); 

这应该解决它。 但一定要访问setfollowredirects静态,即HttpURLConnection.setFollowRedirects(HttpURLConnection.getFollowRedirects());

 url = new URL("https://graph.facebook.com/ID/picture?type=small"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); HttpURLConnection.setFollowRedirects(HttpURLConnection.getFollowRedirects()); connection.setDoInput(true); connection.connect(); input = connection.getInputStream(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(input, null, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, 300, 300); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; options.inPreferredConfig = Config.RGB_565; myBitmap= BitmapFactory.decodeStream(input, null, options); 

要么

 url = new URL("https://graph.facebook.com/ID/picture?type=small"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); HttpURLConnection.setFollowRedirects(HttpURLConnection.getFollowRedirects()); connection.setDoInput(true); connection.connect(); input = connection.getInputStream(); myBitmap= BitmapFactory.decodeStream(input); 

希望这可以帮助

 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); } } 

当你这样提出要求时:

 http://graph.facebook.com/103407310026838/picture?type=square&type=large 

它使redirect到其他url..

您需要在Get请求上添加一个额外的参数

 redirect=false 

喜欢这个

 http://graph.facebook.com/103407310026838/picture?type=square&type=large&redirect=false 

你会得到一个与真实图像url的Json ..

喜欢这个 :

 { "data": { "is_silhouette": true, "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/s200x200/1379841_10150004552801901_469209496895221757_n.jpg?oh=4234dcdfc832a58b9ef7a31c7896c73c&oe=57DD01F8" } } 

最后发出新的请求,以获取您在data-> url中find的图像

滑翔 :

 userId = loginResult.getAccessToken().getUserId(); 

然后;

 Glide.with(this) .load("https://graph.facebook.com/" + userId+ "/picture?type=large") .into(imgProfile); 
 new AsyncTask<String, Void, Bitmap>() { @Override protected Bitmap doInBackground(String... params) { Bitmap bitmap = null; try { String imageURL = "https://graph.facebook.com/" + mFbUserId +"/picture?width=150&width=150"; URL imageURI = new URL(imageURL); bitmap = BitmapFactory.decodeStream(imageURI.openConnection().getInputStream()); } catch (Exception e) { e.printStackTrace(); } return bitmap; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); } @Override protected void onPreExecute() { super.onPreExecute(); } }.execute(); 

url似乎确定。

所以问题在于你的连接。 URL.getContent()真的返回stream吗? 因为如果BitmapFactory得到null,它也返回null。

尝试这个:

 Bitmap bitmap = null; URL url = new URL(http://graph.facebook.com/"+userID+"/picture?type=large); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); try { InputStream in = new BufferedInputStream(urlConnection.getInputStream()); bitmap = BitmapFactory.decodeStream(in); } finally { urlConnection.disconnect(); } 

这可能是你在主线程中使用你的方法

 if( android.os.Build.VERSION.SDK_INT > 9 ) { try { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy( policy ); } } 
  public static Bitmap getFacebookProfilePicture(String userID) throws SocketException, SocketTimeoutException, MalformedURLException, IOException, Exception { String imageURL; Bitmap bitmap = null; imageURL = "http://graph.facebook.com/" + userID + "/picture?type=large"; URL url1 = new URL(imageURL); HttpURLConnection ucon1 = (HttpURLConnection) url1.openConnection(); ucon1.setInstanceFollowRedirects(false); URL secondURL1 = new URL(ucon1.getHeaderField("Location")); InputStream in = (InputStream) new URL(imageURL).getContent(); bitmap = BitmapFactory.decodeStream(in); return bitmap; } 

使用这个代码…..

由于对URL.openConnection()(或任何其他获取图像的机制)的调用是asynchronous的,因此您将得到空值。 它会在你的行后面返回: return bitmap; 。 因此位图总是空的。

我build议使用callback来代替。

这就是我所做的:

 final AQuery androidQuery = new AQuery(this); AjaxCallback<byte[]> imageCallback = new AjaxCallback<byte[]>() { @Override public void callback(String url, byte[] avatar, AjaxStatus status) { if (avatar != null) { save(avatar); } else { Log.e(TAG, "Cannot fetch third party image. AjaxStatus: " + status.getError()); } } }; androidQuery.ajax(imageUrl, byte[].class, imageCallback); 

Android查询允许您以不同的格式(例如字节数组,位图等)获取图像。 还有其他的图书馆,但是这个想法是一样的。

我这样做了:

Facebook的 图片url获取位图

 String imageUrl = "http://graph.facebook.com/103407310026838/picture?type=large&width=1000&height=1000"; Bitmap bitmap = getFacebookProfilePicture(imageUrl); 

位图 function

 private Bitmap getFacebookProfilePicture(String url){ Bitmap bitmap = null; HttpGet httpRequest = new HttpGet(URI.create(url)); HttpClient httpclient = new DefaultHttpClient(); HttpResponse mResponse; try { mResponse = (HttpResponse) httpclient.execute(httpRequest); HttpEntity entity = mResponse.getEntity(); BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity); bitmap = BitmapFactory.decodeStream(bufHttpEntity.getContent()); httpRequest.abort(); } catch(Exception e){ e.printStackTrace(); } return bitmap; } 

完成。

一个完整的解决scheme,为我工作!

 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); } } 

我search所有模式,使这个API 15只有这个方法为我工作,

 String url = "https://graph.facebook.com/"+ fid +"/picture?type=square"; ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap bitmap) { imageView.setImageBitmap(bitmap); } }, 0, 0, null, new Response.ErrorListener() { public void onErrorResponse(VolleyError error) { Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); } }); AppController.getInstance().addToRequestQueue(request); 

从这里下载源代码

添加这个依赖:

 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(); } } 

我用这个代码,我得到了个人资料图片,

 fbUsrPicURL = "http://graph.facebook.com" + File.separator + String.valueOf(fbUID) + File.separator + "picture?type=large";