Android – получить изображение профиля facebook

Я не знаю почему, но я всегда получаю null, когда пытаюсь получить изображение профиля пользователя. Нужно ли устанавливать определенные разрешения для доступа?

Ниже мой метод:

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

Я получаю null. Я не знаю, почему? Любая помощь заметна.

Solutions Collecting From Web of "Android – получить изображение профиля facebook"

Это должно работать:

 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 в комментариях, проблема загрузки изображения не фиксируется с помощью «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); 

Он работает .. Также вы можете установить размер в small / normal / large / custom для ProfilePictureView

Просто используйте Пикассо. Добавьте библиотеку Picasso, а затем используйте этот простой код строки:

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

Вы должны вызвать API GraphRequest для получения 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 для отображения изображения

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

Нет строковой строки

Я всегда получал ответ с сообщением FACEBOOK_NON_JSON_RESULT . Так что, оглядываясь назад в API-интерфейсе API графиков Google, я заметил небольшой флажок с проверкой перенаправления меток. Некоторый googling показал мне, что мне нужно предоставить параметр для моего GraphRequest который запрещает перенаправление. Следовательно, правильный запрос должен быть:

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

Проверьте идентификатор пользователя, используя этот 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 в http

 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); } } 
 imgUrl = "https://graph.facebook.com/" + user_id + "/picture?type=large"; 

попробуй это

Когда вы делаете запрос следующим образом:

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

Он перенаправляет другой URL-адрес.

Вам нужно добавить дополнительный параметр в запрос Get

 redirect=false 

Как это

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

И вы получите Json с Real Image url ..

Как это :

 { "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

С Glide :

 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 () действительно возвращает поток? Поскольку, если 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 () (или любой другой механизм для извлечения изображения) является асинхронным. Он возвращается после вашей строки: return bitmap; , Поэтому растровое изображение всегда равно нулю.

Вместо этого я предлагаю использовать обратный вызов.

Это то, что я сделал:

 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 позволяет получить изображение в разных форматах (например, массив байтов, битмап и т. Д.). Есть и другие библиотеки, но идея такая же.

Я сделал так:

Get Bitmap из Image Url of Facebook :

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

Функция для Bitmap :

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

Готово.

Полное решение, которое сработало для меня!

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

Я ищу все режимы, чтобы сделать это на API 15, только этот метод работает для меня с Volley:

 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";