2010-12-16 19 views
10

में लॉग इन मैं अपने Android आवेदन में आधिकारिक फेसबुक SDK का उपयोग के चित्र प्राप्त करने के। बाद उपयोगकर्ता में लॉग करता है, मैं बहुत तरह uid और फेसबुक उपयोगकर्ता का नाम प्राप्त कर सकते हैं:Android और फेसबुक: कैसे उपयोगकर्ता

Facebook mFacebook = new Facebook(APP_ID); 
// ... user logs in ... 
//String jsonUser = mFacebook.request("me/picture"); // throws error 
String jsonUser = mFacebook.request("me"); 
JSONObject obj = Util.parseJson(jsonUser); 
String facebookId = obj.optString("id"); 
String name = obj.optString("name"); 

मुझे यह भी पता है कि मैं उन लिंक्स के साथ प्रोफ़ाइल तस्वीर का उपयोग कर सकते हैं:

https://graph.facebook.com/<facebookId>/picture 
https://graph.facebook.com/<facebookId>/picture?type=large 

मुझे प्रोफ़ाइल कोड को देखने के लिए इस कोड का उपयोग करना अच्छा लगेगा:

public static Drawable getPictureForFacebookId(String facebookId) { 

    Drawable picture = null; 
    InputStream inputStream = null; 

    try { 
     inputStream = new URL("https://graph.facebook.com/" + facebookId + "/picture").openStream(); 
    } catch (Exception e) {   
    e.printStackTrace(); 
    return null; 

    } 
    picture = Drawable.createFromStream(inputStream, "facebook-pictures"); 

    return picture; 
} 

लेकिन यह अभी काम नहीं करेगा। मुझे हमेशा निम्न त्रुटि मिलती है:

SSL handshake failure: Failure in SSL library, usually a protocol error 

और मैं इस समस्या को हल नहीं कर सकता। ऐसा लगता है कि यह जटिल है (here या here देखें)। तो फेसबुक एप्लिकेशन की तस्वीर पाने के लिए अन्य विकल्प क्या हैं जो मेरे आवेदन में सफलतापूर्वक लॉग इन हैं?

उत्तर

4

अनुरोध ("मुझे/तस्वीर") एक त्रुटि फेंकता है।

+0

दिया गया लिंक अब मर चुका है! – prometheuspk

9

मुझे कुछ समय पहले भी समस्या थी। मैंने जो किया वह एक एसिंक कार्य का उपयोग कर चित्र डाउनलोड किया गया था, और उसके बाद छवि डाउनलोड के साथ एक छवि दृश्य सेट करें। मैं कोड स्निपेट पेस्ट कर दूंगा:

ImageView fbUserAvatar = (ImageView) findViewById(R.id.fb_user_avatar); 

private synchronized void downloadAvatar() { 
    AsyncTask<Void, Void, Bitmap> task = new AsyncTask<Void, Void, Bitmap>() { 

     @Override 
     public Bitmap doInBackground(Void... params) { 
      URL fbAvatarUrl = null; 
      Bitmap fbAvatarBitmap = null; 
      try { 
       fbAvatarUrl = new URL("http://graph.facebook.com/"+USER_ID+"/picture"); 
       fbAvatarBitmap = BitmapFactory.decodeStream(fbAvatarUrl.openConnection().getInputStream()); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return fbAvatarBitmap; 
     } 

     @Override 
     protected void onPostExecute(Bitmap result) { 
      fbUserAvatar.setImageBitmap(result); 
     } 

    }; 
    task.execute(); 
} 

यह कोड मेरे लिए काम करता है। मुझे आशा है कि यह आपके लिए भी काम करेगा। क्योंकि सर्वर 302 रिटर्न (छवि URL पर रीडायरेक्ट) और फेसबुक एसडीके इस हैंडल नहीं करता

+1

इस कोड को केवल आपके लिए काम नहीं कर सका क्योंकि इसे संकलित नहीं किया। 'AsyncTask' 3 पैरामीटर लेता है और 1 नहीं (इसलिए आप' AsyncTask 'का उपयोग नहीं कर सकते, लेकिन' AsyncTask <शून्य, शून्य, बिटमैप> ') का उपयोग नहीं कर सकते।इसके अलावा इसमें 'taskComplete' विधि नहीं है, लेकिन इसके बजाय' onPostExecute' है। मैंने इसे कोड बनाने योग्य बनाने के लिए अपना कोड संपादित किया। – Idolon

+0

मैं अपने स्वयं के AsyncTask का उपयोग केवल एक पैरामीटर के साथ करता हूं, इसलिए हाँ, यह काम कर रहा था। वैसे भी, संपादन के लिए धन्यवाद ... – Antonio

5

आप एक सीधा यूआरएल जो आपके पहुँच टोकन शामिल अनुरोध कर सकते हैं:

URL MyProfilePicURL = new URL("https://graph.facebook.com/me/picture?type=normal&method=GET&access_token="+ Access_token); 

फिर एक डीकोड बिटमैप हो और छवि को देखने के लिए असाइन करें:

Bitmap MyprofPicBitMap = null; 
try { 
    MyprofPicBitMap = BitmapFactory.decodeStream(MyProfilePicURL.openConnection().getInputStream()); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

MyProfilePicImageView.setImageBitmap(mIcon1); 
22
ImageView user_picture; 
userpicture=(ImageView)findViewById(R.id.userpicture); 
URL img_value = null; 
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large"); 
Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream()); 
userpicture.setImageBitmap(mIcon1); 

जहां आईडी उर प्रोफ़ाइल है आईडी ...

+0

अच्छा और सीधा तरीका है, लेकिन मैं कहूंगा कि आईडी भी "parag.chauhan" जैसे उपयोगकर्ता का नाम हो सकता है – MKJParekh

+1

thts true..लेकिन यह प्रत्येक उपयोगकर्ता के लिए उपयोग नहीं किया जा सकता है, क्योंकि थ्रू एक ही नाम के इतने सारे उपयोगकर्ता हो सकता है ... –

+1

उच्च संस्करण के लिए काम नहीं कर रहा है ... यह निम्न संस्करण में आकर्षण की तरह काम करता है लेकिन उच्च संस्करण में नहीं। इसके लिए मुझे क्या करना चाहिए? – AndroidHacker

1

कोड की एक पंक्ति जोड़ें और उस का समाधान हो जाएगा।

HttpURLConnection.setFollowRedirects(true); 
2

अपने अनुप्रयोग में प्रोफ़ाइल फ़ोटो प्रदर्शित करने के लिए, Facebook एसडीके से ProfilePictureView का उपयोग करें।

देखें इस

बस उस पर setProfileId(String profileId) कहते हैं।

यह छवि प्रदर्शित की देखभाल करेंगे।

ProfilePictureView p; 
p = (ProfilePictureView) rootView.findViewById(R.id.fotoPerfil); 
p.setProfileId(usuario.getId()); 

व एक्सएमएल मार्कअप:

0

उपयोग इस, (usuario एक GraphUser है)

<com.facebook.widget.ProfilePictureView 
    android:id="@+id/profilePicture" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:gravity="center_horizontal" 
    android:layout_marginBottom="10dp" 
    facebook:preset_size="normal"/> 
संबंधित मुद्दे