I've been using this site for ages, but this is the first time I've actually been unable to find an answer to my question. I'm following along with an online tutorial in order to add image thumbnails to my app from an RSS feed. I keep experiencing a NULL Pointer Error from my instantiation of convertView, but it is instantiated exactly how the tutorials have it so I don't understand why that is.
public class PostItemAdapter extends ArrayAdapter<PostData> {
private Activity myContext;
private ArrayList<PostData> datas;
private String[] imageURLArray;
LayoutInflater inflater;
static class ViewHolder {
TextView postTitleView;
TextView postDateView;
ImageView postThumbView;
String postThumbViewURL;
Bitmap bitmap;
}
public PostItemAdapter(Context context, int textViewResourceId,
ArrayList<PostData> objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
myContext = (Activity) context;
datas = objects;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.postitem, null);
viewHolder = new ViewHolder();
viewHolder.postThumbView = (ImageView) convertView.findViewById(R.id.postThumb);
viewHolder.postTitleView = (TextView) convertView.findViewById(R.id.postTitleLabel);
viewHolder.postDateView = (TextView) convertView.findViewById(R.id.postDateLabel);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
PostData post = datas.get(position);
if (post.postThumbUrl != null) {
viewHolder.postThumbViewURL = post.postThumbUrl;
new DownloadImageTask().execute(viewHolder);
} else {
viewHolder.postThumbView.setImageResource(R.drawable.ic_action_event);
}
viewHolder.postTitleView.setText(post.postTitle);
viewHolder.postDateView.setText(post.postDate);
new DownloadImageTask().execute(viewHolder);
return convertView;
}
}
Stack trace:
04-24 13:32:12.748 7335-7335/com.chuckfranklin.chuckfranklinlaw E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.chuckfranklin.chuckfranklinlaw, PID: 7335
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup)' on a null object reference
at com.chuckfranklin.chuckfranklinlaw.PostItemAdapter.getView(PostItemAdapter.java:56)
at android.widget.AbsListView.obtainView(AbsListView.java:2825)
at android.widget.ListView.makeAndAddView(ListView.java:1884)
at android.widget.ListView.fillDown(ListView.java:713)
at android.widget.ListView.fillFromTop(ListView.java:779)
at android.widget.ListView.layoutChildren(ListView.java:1679)
at android.widget.AbsListView.onLayout(AbsListView.java:2629)
at android.view.View.layout(View.java:16694)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077)
at android.view.View.layout(View.java:16694)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:16694)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:502)
at android.view.View.layout(View.java:16694)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:16694)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
at android.view.View.layout(View.java:16694)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:16694)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2321)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2034)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6641)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreographer.doFrame(Choreographer.java:560)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
You forgot to initialize inflater
. Since you've got Context
in constructor, you can do it at the following way:
inflater = LayoutInflater.from(context);
Of course, it should be added to constructor, not to getView
.