如何从Facebook获取个人资料图片

时间:2013-01-08 10:02:10

标签: java android facebook

我正在编写一个Android应用程序,我想在其中获取所有我的Facebook朋友的列表以及他们的名字和个人资料图片。

在我的示例代码中,我得到了朋友的名字,但没有得到个人资料图片,请告诉我为什么我会遇到这个问题:

       @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if (v == null) {
        v = inflater.inflate(R.layout.contact_tab, parent, false);
    }

    if (position >= myFriends.size()) {
        return v;
    }

    MyFriend friend = myFriends.get(position);
    ImageView icon_pic = (ImageView) v.findViewById(R.id.icon_pic);
    try {
        URL url = new URL(friend.getPic());
        InputStream is = (InputStream) url.getContent();
        Drawable image = Drawable.createFromStream(is, "fb");
        icon_pic.setImageDrawable(image);
    } catch (Exception e) {
        Log.v(TAG, "myadapter: " + e.getMessage());
    }

MyFacebook.java

 public void init(Main main) {
    this.main = main;
    mFacebook = new Facebook(APP_ID);
    isReady = false;
    mAsyncRunner = new AsyncFacebookRunner(mFacebook);
    mFacebook.authorize(main, new String[] { "publish_stream",
            "friends_birthday", "friends_photos"  }, new MyAuthorizeListener());
}

// ref- http://developers.facebook.com/docs/reference/api/user/
public Report reLoadAllFriends() {
    if (!isReady) {
        Log.v(TAG, "myfacebook.reloadallfriends Not ready yet!");
        return new Report(false, "Not ready yet!");
    }

    Bundle params = new Bundle();
    params.putString("fields", "id,name,birthday,picture");
    mAsyncRunner.request("me/friends", params, new MyRequestListener(
            RequestType.FRIEND_LIST));

    Log.v(TAG, "myfacebook.reloadallfriends Fetch started.");
    return new Report(true, "Fetch started");
}

public List<MyFriend> getAllFriends() {
    return getFilteredFriends(null);
}

public List<MyFriend> getFilteredFriends(com.january.floogoo.Filter week) {
    return Main.db.getFriendsFilteredBy(week);
}

public List<Map<String, String>> getAllFriendsAsMap() {
    return getFilteredFriendsAsMap(null);
}

public List<Map<String, String>> getFilteredFriendsAsMap(Filter filterBy) {
    List<MyFriend> friendList = Main.db.getFriendsFilteredBy(filterBy);

    List<Map<String, String>> list = new ArrayList<Map<String, String>>();
    for (MyFriend friend : friendList) {
        list.add(friend.getMap());
    }
    return list;
}

public void post(String receiver, String message) {
    if (isReady) {
        Bundle params = new Bundle();
        params.putString("message", message);

        mAsyncRunner.request(receiver + "/feed", params, "POST",
                new MyRequestListener(RequestType.FEED_POST));
    }
}

class MyAuthorizeListener extends BaseDialogListener {
    public void onComplete(Bundle values) {
        Log.i(TAG, "Authorization successfull");
        isReady = true;
        main.loadContents();
    }
}

class MyRequestListener extends BaseRequestListener {
    private RequestType type;

    public MyRequestListener(RequestType type) {
        this.type = type;
    }

    public void onComplete(final String response) {
        try {
            switch (type) {
            case FRIEND_LIST:
                 Log.d(TAG, "myfacebook.friendlist Response: "
                 + response.toString());
                myFriends.clear();
                JSONArray jarr = Util.parseJson(response).getJSONArray(
                        "data");
                for (int i = 0; i < jarr.length(); i++) {
                    JSONObject json = jarr.getJSONObject(i);
                    String fbID = json.getString("id");
                    String name = json.getString("name");
                    String bday = json.optString("birthday");
                    String pic = json.getString("picture");

                    myFriends.add(new MyFriend(fbID, name, bday, pic));
                }
                main.notifyMain(Note.FRIENDLIST_RELOADED); 
                break;
            case FEED_POST:
                Log.d(TAG, "myfacebook.feedpost Response: "
                        + response.toString());
                break;
            default:
                break;
            }
        } catch (JSONException e) {
            Log.e(TAG, "JSONException: " + e.getMessage());
        } catch (FacebookError e) {
            Log.e(TAG, "FacebookError: " + e.getMessage());
        }
    }
}

=============================================== ===================

    ImageView icon_pic = (ImageView) v.findViewById(R.id.icon_pic);
     try{
     URL img_value = null;
     String id = null;
 img_value = new URL
      ("http://graph.facebook.com/"+id+"/picture?type=large");            
       Bitmap mIcon = BitmapFactory.decodeStream
        (img_value.openConnection().getInputStream());
     icon_pic.setImageBitmap(mIcon);
     }catch (Exception e) {
            Log.v(TAG, "myadapter: " + e.getMessage());
        }

=============================================== =======================

原始代码在这里:

https://github.com/prajwol/Birthday-Reminder

我的应用中有两个包,第一个 - com.january.floogoo [我的自定义类包]

和第二个 - com.facebook.android [与facebook SDK相关的课程]

我在 com.facebook.android 包中使用了10个类,即:

  1. AsyncFacebookRunner.java

  2. BaseDialogListener.java

  3. BaseRequestListener.java

  4. DialogError.java

  5. Facebook.java

  6. FacebookError.java

  7. FbDialog.java

  8. SessionEvents.java

  9. SessionStore.java

  10. Util.java

  11. 我的问题是我错过了什么吗?如果有,请帮助我......

2 个答案:

答案 0 :(得分:2)

试试..

 ImageView icon_pic = (ImageView) v.findViewById(R.id.icon_pic);
 URL img_value = null;
 img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large");
 Bitmap mIcon = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
 icon_pic.setImageBitmap(mIcon);

其中id是您的朋友个人资料ID之一。

答案 1 :(得分:1)

使用以下链接从Facebook获取个人资料图片。

登录后

https://github.com/chrtatu/FacebookFriendsList您将获得朋友照片列表。

FriendsList.Java是您的Facebook好友同步的类。