1

私は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-リマインダー

私のアプリには2つのパッケージがあります。最初は-com.january.floogoo [私のカスタムクラスパッケージ]

2番目-com.facebook.android [facebookSDKに関連するクラス]

私は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

ここで私の質問は私が何かを逃しているのですか?はいの場合は私を助けてください...

4

2 に答える 2

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つです。

于 2013-01-08T11:53:38.140 に答える
1

以下のリンクを使用して、Facebookからプロフィール写真を取得します。

https://github.com/chrtatu/FacebookFriendsList ログインすると、友達の写真のリストが表示されます。

FriendsList.Javaは、Facebookの友達が同期するクラスです。

于 2013-01-09T07:00:50.837 に答える