2012-11-28 19 views
15

मुझे एंड्रॉइड के लिए फेसबुक एसडीके 3.0 के साथ समस्या का सामना करना पड़ा है। मैं उनके ProfilePictureView विजेट का उपयोग किए बिना मेरी (और मेरे दोस्त) प्रोफ़ाइल तस्वीर प्राप्त करना चाहते है, इसलिए यदि मैं ग्राफ़ एक्सप्लोरर का उपयोग मुझे लगता है कि Json प्रतिक्रिया है:Android के लिए फेसबुक एसडीके 3.0 का उपयोग कर प्रोफ़ाइल चित्र पुनर्प्राप्त करें

{ 
    "data": { 
     "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/372127_1377011138_1538716206_q.jpg", 
     "is_silhouette": false 
    } 
} 

मुझे लगता है कि "Url" पथ डाउनलोड करने और दिखाने की जरूरत है चित्र, लेकिन निम्न कोड के साथ:

GraphObject{graphObjectClass=GraphObject, 
    state={"FACEBOOK_NON_JSON_RESULT":"����\u0000\u0010JFIF\u0000\u0001\u0001\u0000\u0000\u0001\u0000\u0001\u0000\u0000��\u0000"}} 

किसी ने मेरी मदद कर सकते हैं:

Request.executeGraphPathRequestAsync(Session.getActiveSession(), 
            "me/picture", 
             new Request.Callback() { 
     @Override 
     public void onCompleted(Response response) { 
      GraphObject go = response.getGraphObject(); 
      Log.i("APP_NAME", go.toString());   
     } 
}); 

मैं इस प्राप्त? धन्यवाद

Cromir

+1

मैं एक ही समस्या है। आपने इसे कैसे ठीक किया? – Geek

+0

@ उत्तर दें कि http://stackoverflow.com/questions/25055159/android-facebook-sdk-decoding-pictures-from-me-picture-graph-call – kha

उत्तर

1

आप शायद graph.facebook.com/USER_ID/picture करने के लिए एक GET अनुरोध को निष्पादित करने https://developers.facebook.com/apps

+0

के अनुसार रीडायरेक्ट को झूठी पर सेट करना है यह सेटिंग सक्षम है , वास्तव में मैं एक जेसन प्रतिक्रिया प्राप्त करता हूं और न केवल स्ट्रिंग के रूप में यूआरएल प्राप्त करता हूं। –

10

एक आसान तरीका में डेवलपर कंसोल में अपने ऐप की उन्नत सेटिंग्स पर "चित्र शब्दकोश के रूप में" सक्षम करने के लिए किया जाएगा की जरूरत है इसलिए आपको पहले चित्र के लिए यूआरएल का अनुरोध करने की आवश्यकता नहीं है, और फिर दिए गए यूआरएल से चित्र डाउनलोड करने के लिए GET अनुरोध निष्पादित करें।

Request.executeGraphPathRequestAsync का उपयोग करने के बजाय, बस ऊपर दिए गए यूआरएल के लिए सामान्य GET अनुरोध करें, उदा। http://graph.facebook.com/4/picture

+0

यह काम करता है! धन्यवाद!! –

+0

क्या होगा यदि मैं वास्तव में यूआरएल प्राप्त करना चाहता हूं? "चित्र के रूप में चित्र" सेटिंग मदद नहीं करता है। –

+3

यूआरएल हमेशा http://graph.facebook.com/YOUR_USER_ID/picture –

9
You can retreive user information for executeMeRequest in facebook 3.0 sdk. 

    public void executeMeRequest(Session session) { 

     Bundle bundle = new Bundle(); 
     bundle.putString("fields", "picture"); 
     final Request request = new Request(session, "me", bundle, 
       HttpMethod.GET, new Request.Callback() { 

      @Override 
      public void onCompleted(Response response) { 
       GraphObject graphObject = response.getGraphObject(); 
       if(graphObject != null) { 
        try { 
         JSONObject jsonObject = graphObject.getInnerJSONObject(); 
         JSONObject obj = jsonObject.getJSONObject("picture").getJSONObject("data"); 
         final String url = obj.getString("url"); 
          new Thread(new Runnable() { 

           @Override 
           public void run() { 

            final Bitmap bitmap = BitmapFactory.decodeStream(HttpRequest(url); 
            runOnUiThread(new Runnable() { 

             @Override 
             public void run() { 
              imageView.setImageBitmap(bitmap); 
             } 
            }); 
           } 
          }).start(); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }); 
     Request.executeBatchAsync(request); 
    } 

public static InputStream HttpRequest(String strUrl) { 

    HttpResponse responce = null; 
    try { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(); 
     request.setURI(new URI(strUrl)); 
     responce = httpClient.execute(request); 
     HttpEntity entity = responce.getEntity(); 
     return entity.getContent(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
+1

यह वास्तव में अच्छी तरह से काम करता है। मैं बस HttpRequest विधि का उपयोग नहीं करना पसंद किया; इसके बजाय मैंने इनपुटस्ट्रीम का उपयोग = new java.net.URL (url) .openStream() में किया है; अंतिम बिटमैप बिटमैप = बिटमैपफैक्टरी.decodeStream (इन); – Proverbio

1

जहाँ तक मुझे पता है, यह संभव नहीं सीधे फेसबुक ग्राफ एपीआई का उपयोग कर छवि प्राप्त करने, क्योंकि उनके केवल API JSON प्रतिक्रियाओं स्वीकार करने के लिए डिज़ाइन किया गया है है। यह अजीब लगता है कि वे एक अनुरोध की अनुमति देंगे जो नॉन-जेएसओएन प्रतिक्रिया में परिणाम देता है, और विशेष रूप से अजीब है कि वे अपने आधिकारिक दस्तावेज * (https://developers.facebook.com/docs/graph-api/reference/user/picture/) में यह अनुरोध डाल देंगे।

मैं एंड्रॉइड DefaultHttpClient लाइब्रेरी में निर्मित का उपयोग कर रहा हूं।

private Bitmap downloadImage(url) { 
    Bitmap image = null; 
    DefaultHttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(imageUrl); 
    try { 
     HttpResponse response = client.execute(request); 
     HttpEntity entity = response.getEntity(); 

     int imageLength = (int)(entity.getContentLength()); 

     InputStream is = entity.getContent(); 

     byte[] imageBlob = new byte[imageLength]; 

     int bytesRead = 0; 

     // Pull the image's byte array 

     while (bytesRead < imageLength) { 
      int n = is.read(imageBlob, bytesRead, imageLength - bytesRead); 
      bytesRead= n; 
     } 

     image = BitmapFactory.decodeByteArray(imageBlob, 0, imageBlob.length); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return image; 
} 
2

आप ग्राफ़ एपीआई से अनुरोध करके प्रोफ़ाइल चित्र प्राप्त कर सकते हैं। आपको एक्सेस टोकन, उपयोगकर्ता आईडी और रीडायरेक्ट को भी सेट करने की आवश्यकता है। फिर ग्राफ़ एपीआई जेएसओएन और जेएसओएन से लौटाता है तो आप यूआरएल फ़ील्ड प्राप्त कर सकते हैं जो उपयोगकर्ता प्रोफाइल है।

GraphRequest request = new GraphRequest(accessToken, "/" + userID + "/picture",null,HttpMethod.GET, new GraphRequest.Callback() { 
       @Override 
       public void onCompleted(GraphResponse response) { 
        Log.d("Photo Profile", response.getJSONObject().toString()); 
        JSONObject jsonObject = response.getJSONObject(); 
        try { 

         JSONObject data = jsonObject.getJSONObject("data"); 
         String url = data.getString("url"); 
         Picasso.with(getApplicationContext()).load(url).into(ivProfilePicture); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
      Bundle parameters =new Bundle(); 
      parameters.putString("type","large"); 
      parameters.putBoolean("redirect",false); 
      request.setParameters(parameters); 
      request.executeAsync(); 
0

मुझे जवाब मिला ... यह पुनर्निर्देशन के कारण है। इसलिए params बजाय पारित null की:

Bundle params = new Bundle(); 
params.putBoolean("redirect", false);