我试图弄清楚如何创建一个AsyncTask,该AsyncTask在后台运行我的php API代码,然后在MainActivity完成时提醒我。我已经阅读教程并尝试了几个小时,而现在我很沮丧,因为找不到任何能回答我问题的地方。

我创建了AsyncTask并成功运行,并且可以在onPostExecute中记录来自API的返回信息,但是我无法弄清楚如何向MainActivity通知任务已完成。我不知道将什么传递给APICall的创建。我阅读的每个教程都表明AsyncTask构造函数将接口作为参数,如下面的代码所示,但是如何传递接口作为参数呢?

MainActivity.java(实现OnTaskCompleted)

myButton4.setOnClickListener(new OnClickListener(){
    public void onClick(View v){
            APICall api = new APICall( ???What do I put here?? );
            api.execute("users");
         }});
....

@Override
public void onTaskCompleted() {
    Log.v("Play","Main Activity ON Task completed!");


OnTaskCompleted.java

public interface OnTaskCompleted {
public void onTaskCompleted();
}


APICall.java(扩展了AsyncTask)

public APICall(OnTaskCompleted listener){
    this.listener = listener;
}

....

protected void onPostExecute(JSONObject j)
{
    listener.onTaskCompleted();
}

最佳答案

您应该将侦听器的引用传递给APICall类:

APICall api = new APICall(MainActivity.this);

10-04 18:28