Reputation: 57
I need a little help here. I am trying to use AsyncTask (Learning). When I run the application I get a Fatal Exception error for AsyncTask #1 caused by, a null pointer exception. It said it occurred while executing doInBackground. This is the class
public class Title extends AsyncTask <Void, Void, ArrayList> {
public ArrayList<HashMap<String, Object>> newsList;
HashMap<String, Object> hm;
public static String TITLE = "title";
public static String LINK = "link";
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected ArrayList doInBackground(Void... params) {
try {
URL url = new URL("some url");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(getInputStream(url), "UTF_8");
boolean insideItem = false;
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (parser.getName().equalsIgnoreCase("item")) {
insideItem = true;
} else if (parser.getName().equalsIgnoreCase("title")) {
if (insideItem){
hm = new HashMap<>();
hm.put(TITLE, parser.nextText());
}
} else if (parser.getName().equalsIgnoreCase("link")) {
if (insideItem){
hm.put(LINK, parser.nextText());
newsList.add(hm);
}
}
} else if (eventType == XmlPullParser.END_TAG && parser.getName().equalsIgnoreCase("item")) {
insideItem = false;
}
eventType = parser.next();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return newsList;
}
This is the Error i am getting
FATAL EXCEPTION: AsyncTask #1
Process: com.example.vladzakharo.rssreader, PID: 2573
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
at com.example.vladzakharo.rssreader.Title.doInBackground(Title.java:59)
at com.example.vladzakharo.rssreader.Title.doInBackground(Title.java:19)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
Upvotes: 0
Views: 2203
Reputation: 1006614
newsList
is null
, because you never assign a value to it. If you want to avoid a NullPointerException
, do not call add()
on newsList
, until after you have assigned a value to newsList
(e.g., newsList=new ArrayList<HashMap<String, Object>>();
).
Upvotes: 1