0

我正在从我的 Fragment 类调用我的 AsyncTask,当我尝试将数据发送回我的 Fragment 时,我得到一个空指针异常。

public interface AsyncListner { 
    public void onLoadComplete(List<DocumentResponse> documents);   
}

我的 Fragment 类实现了接口。

public class FragmentClass extends SherlockFragment implements AsyncListner {@
    Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        new AsyncTask(Obj, getSherlockActivity()).setListener(this);
        new AsyncTask(Obj, getSherlockActivity()).execute();
    }

    @Override
    public void onLoadComplete(List < Response> data) {
        Log.d("Result", data.toString());
    }
}

我遵循了这个答案。 https://stackoverflow.com/a/13476196/98514

4

2 回答 2

6

您已经调用new了两次,创建了两个不同的 AsyncTask:

new DocumentsAsyncTask(documentsObject, getSherlockActivity()).setListener(this);
new DocumentsAsyncTask(documentsObject, getSherlockActivity()).execute();

您应该只创建一个:

DocumentsAsyncTask task = new DocumentsAsyncTask(documentsObject, getSherlockActivity());
task.setListener(this);
task.execute();

注意到区别了吗?
在您创建的现有代码中:

  • 第一个 AsyncTask,您在其中设置侦听器但不调用execute().
  • 第二个 AsyncTask,它有一个null监听器,但你确实调用了execute().

在新代码中,您有一个 AsyncTask 两者兼而有之。

于 2013-03-31T15:46:31.720 回答
3

如果类的成员变量为 null,则意味着您从未将其初始化为指向构造函数中的非 null 引用。

Java 中的所有对象引用类型都初始化为 null,直到您将它们指向您已通过调用 new 初始化的引用。

你的构造函数在哪里?

于 2013-03-31T15:45:49.283 回答