2013-03-31 63 views
0

我正在從我的Fragment類調用AsyncTask,當我嘗試將數據發送回我的Fragment時,出現空指針異常。我的監聽器中的空指針異常

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

My 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

回答

5

你叫new這兩次創造了兩個不同的AsyncTasks:

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

只應創建一個:

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

注意區別?
在現有的代碼創建:

  • 第一的AsyncTask,在這裏設置監聽器,但不叫​​。
  • 第二的AsyncTask,其中有一個null監聽器,但你叫​​。

在新代碼中,您有一個AsyncTask可以同時執行這兩個操作。

3

如果一個類的成員變量爲空,這意味着你永遠不會初始化它指向一個構造一個非空引用。直到您將其指向你已經有新的呼叫初始化的參考

Java中的所有對象引用類型初始化爲空。

你的構造函數在哪裏?

+0

我已經更新了我的構造函數... – Kevin