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

标签 java android facebook

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

在我的示例代码中,我得到了我 friend 的名字,但没有得到个人资料图片,请告诉我我遇到这个问题的原因:

       @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

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

最佳答案

尝试...

 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 之一。

关于java - 如何从Facebook获取个人资料图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14212433/

相关文章:

java - Spring Boot 应用程序不使用 java -jar 运行

java - 如何将文件存储在Android的缓存目录中?

facebook - 我们可以将 url 从 https 更改为 http 从加载在基本 url 中的 iframe 吗?

java - Junit 框架单元测试 : Mockito. doNothing() 在模拟 void 方法时无法按预期工作

java - java中的printwriter与outputstream与outputstreamwriter

java - 类文件常量池(javap)中的方法签名和描述符

android - 使用 MySQL 数据填充 Android ListView

Android - 通过内置的 SMS 应用程序发送 SMS

facebook - Facebook 发送对话框有移动版吗?

java - 通过 Jsoup 登录 Facebook