Android / Java asyncTask等待

时间:2015-10-25 16:39:46

标签: java android android-asynctask

我无法在这里找到解决方案,所以我会问它。我正在构建一个Android(5.0)应用程序。它将是一个荷兰新闻读者,但我被困在检索新闻项目的部分。在te代码的中心,列表结果将填充项目。它在日志中显示结果,但任务表明它在列表填充之前结束。任何人?被困4小时。它应该等到" 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;
            }
        }

1 个答案:

答案 0 :(得分:2)

您正在创建一个AsyncTask,并且在AsyncTask中,您正在创建另一个线程(Retrofit会这样做)。

这就是为什么你的代码搞砸了。
service.GetNewsItems(cb)是异步的,因此当您从AsyncTask返回时,Retrofit调用尚未完成,因此您的数据尚未就绪。

您应该单独使用Retrofit,或单独使用AsyncTask。切勿混合它们。互联网上有一百万个Retrofit指南(版本1.9和2.0-beta),所以只需谷歌吧。