2015-08-31 19 views

risposta

48

Per prima cosa è necessario chiamare GraphRequest API per ottenere tutti i dettagli dell'utente in cui l'API fornisce anche l'URL dell'immagine del profilo corrente.

Bundle params = new Bundle(); 
params.putString("fields", "id,email,gender,cover,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()); 
          mImageView.setBitmap(profilePic); 
         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
}).executeAsync(); 
+0

Questo genera errori per me perché decodeStream cerca un URL invece di una stringa - Sto facendo qualcosa di sbagliato? – ntgCleaner

+0

hanno provi BitmapFactory.decodeStream (url.op . EnConnection() getInputStream()); ?? – Rajesh

+1

Ho usato il tuo testo esatto, posto 'getFacebookProfilePicture()' al di fuori di onCreate e mostra '.openConnection()' come non risolto. Non sono sicuro di cosa sto facendo male – ntgCleaner

0

Chiamate questo URL:

graph.facebook.com/<facebook_user_id>/picture?type=large 

tipo può essere grande, normale o piccolo.

Un altro modo è quello di utilizzare ProfilePictureView

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

Dopo di che è possibile impostare facebook id come questo in codice

profilePictureView.setProfileId(facebookUserId); 
+0

grazie funziona. Puoi dirmi come usare questo link con il grafico request api? Un piccolo snippet di codice –

3

Se si desidera un'immagine davvero grande, si dovrebbe specificare. almeno una dimensione dell'immagine - per es.

String profileImg = "https://graph.facebook.com/" + loginResult.getAccessToken().getUserId() + "/picture?type=large&width=1080"; 

Inoltre, è possibile specificare entrambi i formati (aggiungere & height = some_val), ma poi Facebook sarà ritagliare questa immagine profilo.

14

Da ultimo SDK 4.5.0

String url; 
Bundle parametersPicture = new Bundle(); 
parametersPicture.putString("fields", "picture.width(150).height(150)"); 

GraphResponse lResponsePicture = new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/", 
         parametersPicture, null).executeAndWait(); 
if (lResponsePicture != null && lResponsePicture.getError() == null && 
          lResponsePicture.getJSONObject() != null) { 
    url = lResponsePicture.getJSONObject().getJSONObject("picture") 
           .getJSONObject("data").getString("url"); 
} 
1
try { 
String fbId="970463683015249"; 
URL fb_url = new URL("http://graph.facebook.com/"+fbId+"/picture?type=small");//small | noraml | large 
HttpsURLConnection conn1 = (HttpsURLConnection) fb_url.openConnection(); 
HttpsURLConnection.setFollowRedirects(true); 
conn1.setInstanceFollowRedirects(true); 
Bitmap fb_img = BitmapFactory.decodeStream(conn1.getInputStream()); 
}catch (Exception ex) { 
    ex.printStackTrace(); 
    } 
2

protetta Rajendra void (LoginButton login_button) {

login_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult login_result) { 
      GraphRequest request = GraphRequest.newMeRequest(
        login_result.getAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(
           JSONObject object, 
           GraphResponse response) { 

          response.getError(); 

          try { 
           if (android.os.Build.VERSION.SDK_INT > 9) { 
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
            StrictMode.setThreadPolicy(policy); 
            String profilePicUrl = object.getJSONObject("picture").getJSONObject("data").getString("url"); 

            URL fb_url = new URL(profilePicUrl);//small | noraml | large 
            HttpsURLConnection conn1 = (HttpsURLConnection) fb_url.openConnection(); 
            HttpsURLConnection.setFollowRedirects(true); 
            conn1.setInstanceFollowRedirects(true); 
            Bitmap fb_img = BitmapFactory.decodeStream(conn1.getInputStream()); 
            image.setImageBitmap(fb_img); 
           } 
          }catch (Exception ex) { 
           ex.printStackTrace(); 
          } 
         } 
        }); 
      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "id,picture"); 
      request.setParameters(parameters); 
      request.executeAsync(); 
     } 
1

ottenere l'immagine da Facebook

String image_url = "http://graph.facebook.com/" + Profile.getCurrentProfile().getId() + "/picture?type=large"; 
Glide.with(activity) 
    .load(image_url) 
    .into(imageView); 

dipendenza

compile 'com.github.bumptech.glide:glide:4.1.1' 
0

immagine facebook

https://graph.facebook.com//immagine "+ facebookUid +"?height = 9999 & redirect = 0"

immagine google

String = googleEmailName googleEmail.substring (0, googleEmailName.indexOf ("@"))

http://picasaweb.google.com/data/entry/api/user/ "+ googleEmailName +"? alt = JSON

+0

Dovresti scrivere qualcosa per spiegare cosa stai facendo. – trungduc

+0

per favore aggiungi qualche descrizione. –

+0

Grazie, spiegami –

Problemi correlati