[英]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.