我无法在这里找到解决方案,所以我会问它。我正在构建一个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;
}
}
答案 0 :(得分:2)
您正在创建一个AsyncTask,并且在AsyncTask中,您正在创建另一个线程(Retrofit会这样做)。
这就是为什么你的代码搞砸了。
service.GetNewsItems(cb)
是异步的,因此当您从AsyncTask返回时,Retrofit调用尚未完成,因此您的数据尚未就绪。
您应该单独使用Retrofit,或单独使用AsyncTask。切勿混合它们。互联网上有一百万个Retrofit指南(版本1.9和2.0-beta),所以只需谷歌吧。