8

Ich habe Facebook 3.6 SDK verwendet. Ich möchte Profilbild von Graph Benutzer erhalten, das letzte Mal habe ich Bild, aber jetzt gibt es Null Bitmap.So erhalten Sie Facebook Profilbild des Benutzers in Facebook SDK Android

verwendet I-Code folgende

private void onSessionStateChange(Session session, SessionState state, 
      Exception exception) { 
     if (session.isOpened()) { 
      Request.newMeRequest(session, new Request.GraphUserCallback() { 
       @Override 
       public void onCompleted(GraphUser user, Response response) { 
        if (user != null) { 
         try { 
          URL imgUrl = new URL("http://graph.facebook.com/" 
            + user.getId() + "/picture?type=large"); 

          InputStream in = (InputStream) imgUrl.getContent(); 
          Bitmap bitmap = BitmapFactory.decodeStream(in); 
          //Bitmap bitmap = BitmapFactory.decodeStream(imgUrl  // tried this also 
          //.openConnection().getInputStream()); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       } 
      }).executeAsync(); 
     } 
    } 

Wenn i Link verwenden dann funktioniert es.

imgUrl = new URL("https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-ash3/t39.2365-6/851558_160351450817973_1678868765_n.png"); 

refered i dieses Graph API Reference

Antwort

25

Auto Umleitung automatisch funktioniert, wenn Original und umgeleitet Protokolle gleich sind.

Also, versuchen Sie Bilder laden von https statt http: "https://graph.facebook.com/USER_ID/picture"; Da die URL des Bildes ist "https://fbcdn-profile-a.akamaihd.net/ ...."

Dann BitmapFactory.decodeStream soll wieder funktionieren.

+0

danke jetzt funktioniert perfekt. –

+0

Danke für die Enthüllung der Umleitung. –

+0

Ich denke, indem Sie '& redirect = false 'in der URL verhindern Umleitung, nicht? – theapache64

3

auch diesen Code Versuchen Sie,

try { 
     URL image_value = new URL("http://graph.facebook.com/"+ user.getId()+ "/picture?type=large"); 
     Bitmap bmp = null; 
     try { 
       bmp = BitmapFactory.decodeStream(image_value.openConnection().getInputStream()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
       profile_pic.setImageBitmap(bmp); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } 

hier profile_pic Ihre ImageView es mit Ihren ImageView Namen ersetzen soll.

bearbeiten

Session.openActiveSession(this, true, new Session.StatusCallback() { 

     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      if (session.isOpened()) { 
       // make request to the /me API 
       Request.executeMeRequestAsync(session, 
         new Request.GraphUserCallback() { 
          @Override 
          public void onCompleted(GraphUser user, 
            Response response) { 
           if (user != null) { 
            try { 
    URL image_value = new URL("http://graph.facebook.com/"+ user.getId()+ "/picture?type=large"); 
    Bitmap bmp = null; 
    try { 
      bmp = BitmapFactory.decodeStream(image_value.openConnection().getInputStream()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
      profile_pic.setImageBitmap(bmp); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
           } 
          } 
         }); 
      } else { 
       Toast.makeText(getApplicationContext(), "Error...", 
         Toast.LENGTH_LONG); 
      } 
     } 
    }); 
+0

wieder bitmap returns _null_ –

+0

@TulsiramRathod, Überprüfen Sie meine bearbeitete Antwort. – InnocentKiller

+0

Ich versuchte und ich bekomme richtigen Link.Wenn ich diesen Link im Browser anklicke, wird das Bild geladen, aber Bitmap gibt null zurück durch den Code –

1

diesen Code Versuchen

public static String getProfilePicture() { 

    String stringURL = null; 
    try { 
     stringURL = "http://graph.facebook.com/" + URLEncoder.encode(DataStorage.getFB_USER_ID(), "UTF-8") + "?fields=" + URLEncoder.encode("picture", "UTF-8"); 
    } catch (UnsupportedEncodingException e1) { 
     e1.printStackTrace(); 
    } 

    LogUtil.log(TAG, "getProfilePicture final url is : "+stringURL); 

    JSONObject jsonObject = null; 
    String response = ""; 

    try { 

     HttpGet get = new HttpGet(stringURL); 
     get.setHeader("Content-Type", "text/plain; charset=utf-8"); 
     get.setHeader("Expect", "100-continue"); 

     HttpResponse resp = null; 
     try { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      resp = httpClient.execute(get); 
     } catch (Exception e) { 
      e.printStackTrace(); 

     } 
     // get the response from the server and store it in result 
     DataInputStream dataIn = null; 
     try { 
      //    dataIn = new DataInputStream(connection.getInputStream()); 
      if (resp != null) { 
       dataIn = new DataInputStream((resp.getEntity().getContent())); 
      } 
     }catch (Exception e) { 
      e.printStackTrace(); 

     } 

     if(dataIn != null){ 
      String inputLine; 
      while ((inputLine = dataIn.readLine()) != null) { 
       response += inputLine; 
      } 

      if(Constant.DEBUG) Log.d(TAG,"final response is : "+response); 

      if(response != null && !(response.trim().equals(""))) { 
       jsonObject = new JSONObject(response); 
      } 

      dataIn.close(); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 

    } 

    String profilePicture = ""; 
    try{ 
     if(jsonObject != null){ 
      JSONObject jsonPicture = jsonObject.getJSONObject("picture"); 
      if(jsonPicture != null){ 
       JSONObject jsonData = jsonPicture.getJSONObject("data"); 
       if(jsonData != null){ 
        profilePicture = jsonData.getString("url"); 
       } 
      } 
     } 
    }catch (Exception e) { 
     e.printStackTrace(); 
    } 

    LogUtil.log(TAG, "user fb profile picture url is : "+profilePicture); 
    return profilePicture; 
} 
+0

von dieser URL. Ich bekomme ein Profilbild, aber diese Bildqualität ist nicht gut. –

+0

@TulsiramRathod Können Sie die Bild-URL teilen. – Yuvaraja

+0

Bitte überprüfen Sie diese https://m.ak.fbcdn.net/profile.ak/hprofile-ak-prn2/t5.0-1/203169_100000114511793_1329215586_q.jpg –

-1

Ich habe versucht, Umleitungsseite "https://fbcdn-profile-a.akamaihd.net/" + USERID + "/ Bild? Typ = groß", aber es hat nicht funktioniert.

Es scheint, dass Facebook Sie jetzt auf eine andere Seite umleitet, die wir nicht erraten können. Art der Zufallsvariablen in URL.

So versuchen Sie unter Methode, um die neue Redirect-Seite von Facebook zur Verfügung gestellt.

private String getProfileGif(String userId) throws IOException { 

    HttpParams httpParams = new BasicHttpParams(); 
    httpParams.setParameter("http.protocol.handle-redirects", false); 
    HttpGet pageToRequest = new HttpGet("http://graph.facebook.com/" + userId + "/picture?type=large"); 
    pageToRequest.setParams(httpParams); 

    AndroidHttpClient httpClient = AndroidHttpClient 
      .newInstance("Android"); 
    HttpMessage httpResponse = httpClient.execute(pageToRequest); 
    Header header = httpResponse.getFirstHeader("location"); 

    if(header != null){ 
     return(header.getValue()); 
    } 

    return ""; 
} 

Dies wird Ihnen die echte GIF-URL (finale URL) zurückgeben.

Danach verwenden Sie diese neue URL, um Ihre Bitmap zu analysieren.

Veränderung aus:

URL image_value = new URL("http://graph.facebook.com/"+ user.getId()+ "/picture?type=large"); 

zu

URL image_value = new URL(getProfileGif(user.getId()); 
Bitmap bmp = BitmapFactory.decodeStream(image_value.openConnection().getInputStream()); 

PS: Dont getProfileGif oder eine URL-Anforderung in Haupt-Thread auszuführen.

Lassen Sie mich Ihre Ergebnisse wissen.