第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何將 Facebook Graph api 的結(jié)果添加到 Java 中的數(shù)組列表

如何將 Facebook Graph api 的結(jié)果添加到 Java 中的數(shù)組列表

慕蓋茨4494581 2023-05-10 15:18:39
我正在使用 Facebook graph api 來找出用戶屬于哪些頁面。當(dāng)查詢返回一個(gè) json 對(duì)象時(shí),它有我需要的東西,但是由于某種原因它不想添加到我的數(shù)組列表中。正確的值打印在 log.d 中,它似乎出于某種原因跳過了我的 arraylist。有任何想法嗎?查找頁面功能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;} 
查看完整描述

2 回答

?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊

有一種解決此問題的常用方法,即定義一個(gè)回調(diào)方法,在調(diào)用填充這些值后將這些值返回給您,就像這樣(我的 java 生銹了,請(qǐng)耐心等待.. .)


定義一個(gè)接口:


 interface Callback{

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

    }

然后,在您的常規(guī) 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

}

然后,當(dāng)你打電話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();


查看完整回答
反對(duì) 回復(fù) 2023-05-10
?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊

是的。這里:

request.executeAsync();

觸發(fā)異步請(qǐng)求。但是你的“當(dāng)前”線程只是繼續(xù)做:

return foundPages;

它返回一個(gè)空列表。

該列表稍后會(huì)被填充,但在該方法返回的那一刻,該列表仍然是空的?;蛘咧皇潜惶顫M。誰知道呢,因?yàn)樗鼤?huì)在未來某個(gè)未知的時(shí)間點(diǎn)異步填充。

一個(gè)解決方案可能是讓一些其他變量/字段告訴您數(shù)據(jù)已到達(dá)并推入列表。

或者,該方法可以只發(fā)出一個(gè)同步請(qǐng)求,簡(jiǎn)單地阻止調(diào)用者繼續(xù)進(jìn)行,直到數(shù)據(jù)到達(dá)。

你看,你不能兩全其美:當(dāng)你不等待結(jié)果到達(dá)時(shí),你不應(yīng)該期望它們立即可用。


查看完整回答
反對(duì) 回復(fù) 2023-05-10
  • 2 回答
  • 0 關(guān)注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)