0

我将 asynctask 分离为单独的类,但现在在将结果传回时出现错误。我正在尝试使用接口来利用回调功能。你能告诉我错误在哪里吗?( line 40 is callback.onDeleteAdd(result); )

界面

public interface DeleteAddInterface {
    public void onDeleteAdd(JSONObject result);
}

异步任务

public class DeleteAdd extends AsyncTask<Advert, Void, JSONObject> {
    private DeleteAddInterface callback;
    private int atempt = 0;
    private Advert advert;

    public DeleteAdd(int atempt) {
        this.atempt = atempt;
    }

    public DeleteAdd() {

    }

    @Override
    protected JSONObject doInBackground(Advert... advert) {
        this.advert = advert[0];
        if (atempt < 5) {
            UserFunctions u = new UserFunctions();
            return u.getNewAdd(advert[0].getId());
        } else
            return null;
    }

    @Override
    protected void onPostExecute(JSONObject result) {
        super.onPostExecute(result);
        if (result == null) {
            DeleteAdd add = new DeleteAdd(atempt + 1);
            add.execute(advert);
        } else {
            callback.onDeleteAdd(result);
        }
    }

}

活动

public class AddToCheckActivity extends ErrorActivity implements DeleteAddInterface{

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                DeleteAdd dAdd = new DeleteAdd();
        dAdd.execute(adv);

@Override
    public void onDeleteAdd(JSONObject result) {
        Intent i = new Intent(getApplicationContext(),
                MyAddPrepareActivity.class);
        startActivity(i);
        finish();

    }
}

错误

10-27 02:16:26.322: E/AndroidRuntime(12664): FATAL EXCEPTION: main
10-27 02:16:26.322: E/AndroidRuntime(12664): java.lang.NullPointerException
10-27 02:16:26.322: E/AndroidRuntime(12664):    at networkOperations.DeleteAdd.onPostExecute(DeleteAdd.java:40)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at networkOperations.DeleteAdd.onPostExecute(DeleteAdd.java:1)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at android.os.AsyncTask.finish(AsyncTask.java:631)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at android.os.Looper.loop(Looper.java:158)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at android.app.ActivityThread.main(ActivityThread.java:5751)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at java.lang.reflect.Method.invokeNative(Native Method)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at java.lang.reflect.Method.invoke(Method.java:511)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
10-27 02:16:26.322: E/AndroidRuntime(12664):    at dalvik.system.NativeStart.main(Native Method)
4

1 回答 1

1

您需要将侦听器的实现(您的 Activity)传递给 AsynchTask。

像这样更改您的构造函数:

public DeleteAdd(DeleteAddInterface callback) {
  this.callBack = callback;
}

在您的活动中:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            DeleteAdd dAdd = new DeleteAdd(this);
    dAdd.execute(adv);

干杯

于 2013-10-27T02:49:33.953 回答