2013-02-24 47 views
0

這是我的AsyncTask類。AsyncTask中的NullPointerException

class AsyncLoad extends AsyncTask<Void, Void, ArrayList<ListData>> { 

    int i = 0; 

    protected ArrayList<ListData>[] onPostExecute(ArrayList<ListData>... result) { 

     return result; 
    } 

    protected ArrayList<ListData> doInBackground(Void... parameter) { 

     ArrayList<ListData> news = null; 

     int[] id = { 1, 2, 3, 4, 5 }; 
     String[] title = { "title1", "title2", "title3", "title4", "title5" }; 
     String[] category = { "category1", "category2", "category3", 
       "category4", "category5" }; 
     int[] image = { R.drawable.pic01, R.drawable.pic02, R.drawable.pic03, 
       R.drawable.pic04, R.drawable.pic05, R.drawable.pic06 }; 

     for (i = 0; i <= id.length - 1; i++) { 

      news.add(new ListData(id[i], title[i], category[i], image[i])); 

     } 

     return news; 

    } 
} 

當我試圖執行這個任務我得到這個錯誤: LOG

02-24 21:44:51.265: E/AndroidRuntime(7684): FATAL EXCEPTION: AsyncTask #1 
02-24 21:44:51.265: E/AndroidRuntime(7684): java.lang.RuntimeException: An error  occured while executing doInBackground() 
02-24 21:44:51.265: E/AndroidRuntime(7684): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
02-24 21:44:51.265: E/AndroidRuntime(7684): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
02-24 21:44:51.265: E/AndroidRuntime(7684):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
02-24 21:44:51.265: E/AndroidRuntime(7684):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
02-24 21:44:51.265: E/AndroidRuntime(7684):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
02-24 21:44:51.265: E/AndroidRuntime(7684):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
02-24 21:44:51.265: E/AndroidRuntime(7684):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
02-24 21:44:51.265: E/AndroidRuntime(7684):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
02-24 21:44:51.265: E/AndroidRuntime(7684):  at java.lang.Thread.run(Thread.java:856) 
02-24 21:44:51.265: E/AndroidRuntime(7684): Caused by: java.lang.NullPointerException 

這是ListData.java:

package com.example.test2; 

public class ListData { 
int id; 
String title;  
String category;   
int image;  


ListData(int _id, String _title, String _category, int _image) { 
    id = _id; 
    title = _title; 
    category = _category; 
    image = _image;  

} 

}

在MainActivity中,我只是執行AsynTask( AsyncLoad load = new AsyncLoad(); load.execute(); )

請幫我找到我錯在哪裏!

回答

3

好的。看看這個:

ArrayList<ListData> news = null; 

然後:

news.add(new ListData(id[i], title[i], category[i], image[i])); 

你是怎麼想到要工作? news永遠不會有非空值,所以當你撥打news.add得到NullPointerException。你想要的東西,如:

List<ListData> news = new ArrayList<ListData>(); 

(注意我是如何使用ArrayList作爲具體執行,但寧願一般程序接口,我所做的news變量本身List<ListData>類型。)

+0

哦,非常感謝你!它的工作原理) – IQW 2013-02-24 22:06:42

1

你從來沒有實例化你的名單news。你需要這樣做:

ArrayList<ListData> news = new ArrayList<ListData>(); 
+0

'news'是一個變量 - 不存在「實例化」變量的情況。該變量已初始化,但爲空。值得嘗試將變量,引用和對象的想法分開 - 它們是非常不同的概念,混合起來會造成混淆。 – 2013-02-24 20:00:06

相關問題