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。