Java AsyncTask未调用onPostExecute
其他类别:Java AsyncTask未调用onPostExecute,java,android,android-asynctask,Java,Android,Android Asynctask,其他类别: SpotifyTask st = new SpotifyTask(new Closure<JSONObject>() { @Override public void executeOnSuccess(JSONObject result) { track.setJson(result); } }); st.execute("asd"); 正在执行任务: public clas
SpotifyTask st = new SpotifyTask(new Closure<JSONObject>() {
@Override
public void executeOnSuccess(JSONObject result) {
track.setJson(result);
}
});
st.execute("asd");
正在执行任务:
public class SpotifyTask extends AsyncTask<Object, Void, JSONObject> {
private final Closure<JSONObject> closure;
public SpotifyTask(Closure<JSONObject> closure) {
this.closure = closure;
}
public static void getTrack(Closure<JSONObject> closure) {
new SpotifyTask(closure).execute("asd");
}
@Override
protected JSONObject doInBackground(Object... params) {
JSONObject result = null;
SpotifyCall spcall = new SpotifyCall();
try {
result = spcall.getTrack();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(JSONObject result) {
System.out.println("ASD: on post execute "+result);
closure.executeOnSuccess(result);
}
}
所以。。。doInBackground运行正常,返回JSONObject正常;我知道,因为我正在消除它,结果是一个JSONObject
但是onPostExecute永远不会执行,调试器永远不会到达那里,并且ASD:on postexecute+结果永远不会被记录
有什么建议吗
提前谢谢 问题是我持有UI线程:
this.status = "loading";
final Track track = new Track();
SpotifyTask.getTrack(new Closure<JSONObject>() {
@Override
public void executeOnSuccess(JSONObject result) {
track.setJson(result);
}
});
while (this.status.equals("loading")) {
if (track.getJson() != null) {
this.trackUno = track.getJson();
this.status = "ready";
} else {
try {
System.out.println("Not ready, waiting.");
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我一拆下while块,它就工作得很好
我必须找到另一种方法等待通话完成
谢谢你们的时间,伙计们 检查spcall.getTrack是否正确;有一个无限循环someSpCall.getTrack返回OK,doInBackground结果实际上是一个JSONObject。您的静态getTrack方法是否在UI线程上被调用?我不确定您所说的UI线程是什么意思。。。正如您在我发布的代码中所看到的,getTrack是从AsyncTask类调用的,我使用的是SpotifyTask,在doInBackground方法上运行良好。你说的UI thead是什么意思?所有异步任务都必须在UI线程上运行吗?不要使用System.out.println,使用Log.d。