2013-02-24 2 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은 null이 아닌 값을 갖지 않으므로 news.add으로 전화하면 이되고 NullPointerException이됩니다. 당신은 같은 것을 원하는 :

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

(나는 구체적인 구현으로 ArrayList을 사용했던 방법 참고를하지만, 인터페이스에 일반적으로 프로그램에 선호하는 것은, I 형 List<ListData>news 변수 자체를했습니다.)

+0

아, 정말 고마워요! 작동합니다) – IQW

1

당신은 결코 당신의 목록 news을 인스턴스화하지 않았습니다. 다음을 수행해야합니다.

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

'news'는 변수입니다 - 변수를 "인스턴스화"하는 것과 같은 것은 없습니다. 변수는 초기화되지만 null로 설정됩니다. 변수, 참조 및 객체의 아이디어를 분리하려고하면 가치가 있습니다. 매우 다른 개념이므로 혼동하면 혼란이 생깁니다. –