IQW
IQW

Reputation: 859

NullPointerException in AsyncTask

This is my AsyncTask class.

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;

    }
}

When i'm trying to execute this task i get this error: 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

And this is the 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;     

}

}

And in MainActivity i'm just executing AsynTask ( AsyncLoad load = new AsyncLoad(); load.execute(); )

Please help me to find where i'm wrong!

Upvotes: 0

Views: 882

Answers (2)

ebarrenechea
ebarrenechea

Reputation: 3785

You never instantiated your list news. You need to do this:

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

Upvotes: 1

Jon Skeet
Jon Skeet

Reputation: 1500525

Well yes. Look at this:

ArrayList<ListData> news = null;

and then:

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

How did you expect that to work? news will never have a non-null value, so when you call news.add you will get a NullPointerException. You want something like:

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

(Note how I've used ArrayList as the concrete implementation, but preferring to generally program to interfaces, I've made the news variable itself of type List<ListData>.)

Upvotes: 3

Related Questions