簡體   English   中英

Android / Java asyncTask等待

[英]Android/Java asyncTask wait

我在這里找不到解決方案,所以我要提出解決方案。 我正在構建一個Android(5.0)應用程序。 這將是荷蘭新聞閱讀器,但是我被困在檢索新聞的那部分。 在代碼的中心,列表結果將充滿項目。 它在日志中顯示結果,但是任務說它在列表被填滿之前就結束了。 任何人? 被卡在這四個小時。 它應該等到“ service.GetNewsItems(cb);”為止。 完成。

碼:

    public class GetNewsAsync extends AsyncTask<String, String, String> {

        public List<Result> results = new ArrayList<Result>();
        private RestAdapter restAdapter;
        public RootObject rootObject = new RootObject();
        public MainActivity ma;
        static final String API_URL = SECRETAPILINK

            @Override
            protected String doInBackground(String... params) {
                OkHttpClient mOkHttpClient = new OkHttpClient();
                mOkHttpClient.setConnectTimeout(15000, TimeUnit.MILLISECONDS);
                mOkHttpClient.setReadTimeout(15000, TimeUnit.MILLISECONDS);
                restAdapter = new RestAdapter.Builder().setEndpoint(API_URL).setClient(new OkClient(mOkHttpClient)).setLogLevel(RestAdapter.LogLevel.FULL) .build();
                GetNewsService service = restAdapter.create(GetNewsService.class);

                Callback<RootObject> cb = new Callback<RootObject>() {
                    @Override
                    public void success(RootObject responseObject, Response response) {
                        results.addAll(responseObject.results);
                        for (int i = 0; i< results.size();i++){
                            Log.v("AASSAA", "DSFSDFHE");
                        }
                    }

                    @Override
                    public void failure(RetrofitError error) {
                        Log.v("AASSAA", error.toString());
                    }
                };
                service.GetNewsItems(cb);
                Log.v("AASSAASIZER", String.valueOf(results.size()));
                return "Done";
            }

            @Override
            protected void onPostExecute(String result) {

            }
            @Override
            protected void onPreExecute() {

            }

            @Override
            protected void onProgressUpdate(String... text) {

            }
            public List<Result> GetList(){
                return results;
            }
        }

您正在創建一個AsyncTask,並在AsyncTask內創建一個ANOTHER線程(Retrofit會執行此操作)。

這就是為什么您的代碼搞砸了。
service.GetNewsItems(cb)是異步的,因此當您從AsyncTask返回時,Retrofit調用尚未完成,因此您的數據尚未准備好。

您應該單獨使用Retrofit或單獨使用AsyncTask。 切勿混合。 互聯網上有上百萬的翻新指南(版本1.9和2.0-beta),因此只需在Google上進行搜索即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM