java - 如何在 Java 中将 Facebook Graph api 的结果添加到数组列表中

标签 java android facebook-graph-api

我正在使用 Facebook 图形 API 来找出用户所在的页面。当查询返回一个 json 对象时,它有我需要的内容,但由于某种原因它不想添加到我的数组列表中。正确的值打印在 log.d 中,它似乎由于某种原因跳过了我的数组列表。有什么想法吗?

查找页面功能

private ArrayList<String> foundPages;
private JSONObject jsonObject; 

public ArrayList<String> findPages()
{
    accessToken = AccessToken.getCurrentAccessToken();
    foundPages = new ArrayList<>();

    GraphRequest request = GraphRequest.newGraphPathRequest(
            accessToken,
            "/me/accounts",
            new GraphRequest.Callback() {
                @Override
                public void onCompleted(GraphResponse response) {

                    try {

                        jsonObject = response.getJSONObject();
                        for(int i=0; i < jsonObject.getJSONArray("data").length(); i++)
                        {
                         page = response.getJSONObject().getJSONArray("data").getJSONObject(i).getString("name");
                            Log.d("viewmodel",page);
                            foundPages.add(page);

                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });

    request.executeAsync();


    return foundPages;
} 

最佳答案

有一个常见的方法来解决这个问题,那就是定义一个回调方法,在调用填充这些值之后,它将返回给你,就像这样(我的java很生锈,请忍受我...)

定义一个接口(interface):

 interface Callback{
        void apiResponseCallback(ArrayList<Page> result);//whatever your model is, make the array of that type
    }

然后,在正常的 findPages 方法中,将其更改为:

public void findPages(Callback callback) {
    //
    // 
    ........
     for(int i=0; i < jsonObject.getJSONArray("data").length(); i++)
                    {
                     page = response.getJSONObject().getJSONArray("data").getJSONObject(i).getString("name");
                        Log.d("viewmodel",page);
                        foundPages.add(page);

                    } 
    callback.apiResponseCallback(foundPages);//here we are returning the data when it is done
}

然后,当您调用 findPages

findPages(new Callback() {
        @Override
        public void apiResponseCallback(ArrayList<Page> result) {
            here, this result parameter that comes through is your api call result to use, so result will be your populated pages to use.
        }
    });
}

为了完整性:

public void findPages(Callback callback)
{
    accessToken = AccessToken.getCurrentAccessToken();
    foundPages = new ArrayList<>();

    GraphRequest request = GraphRequest.newGraphPathRequest(
            accessToken,
            "/me/accounts",
            new GraphRequest.Callback() {
                @Override
                public void onCompleted(GraphResponse response) {

                    try {

                        jsonObject = response.getJSONObject();
                        for(int i=0; i < jsonObject.getJSONArray("data").length(); i++)
                        {
                         page = response.getJSONObject().getJSONArray("data").getJSONObject(i).getString("name");
                            Log.d("viewmodel",page);
                            foundPages.add(page);

                        }
                        callback.apiResponseCallback(foundPages);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });

    request.executeAsync();
} 

关于java - 如何在 Java 中将 Facebook Graph api 的结果添加到数组列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57297762/

相关文章:

java - Java Bean 和企业 Java Bean 的区别?

Java ME 绘制矩形

ios - 使用 iOS SDK 获取 Facebook 好友在某些好友上返回 null

ios - 如何通过 iPhone SDK 中的 FBconnect 或 Graph API 在 facebook 中评论或点赞照片?

java - 如何使用 Netbeans 将 jLabel 放在另一个 jLabel 之上?

Java类变量作用域问题

java - Android 中处理 ImageView 的对象池?

android - 为什么具有 NET_CAPABILITY_INTERNET 功能的 WifiNetworkSpecifier 总是返回 onUnavailable?

java - 查找图像 OpenCV Android SDK 中的颜色百分比

facebook - v2.2 中 read_stream 和 user_posts 权限的区别