Reputation: 16463
Today I got an unknown NullPointerException which I'm unable to reproduce. Logcat shows that it doesn't occurred due to my code. Exception happenned due to something in the ListView, My question is, yhy it doesn't point to my code due to which it occurred. I'm new to android Here's the logcat :
02-07 18:32:46.796: D/AndroidRuntime(20239): Shutting down VM
02-07 18:32:46.796: W/dalvikvm(20239): threadid=1: thread exiting with uncaught exception (group=0x412ec2a0)
02-07 18:32:46.806: E/AndroidRuntime(20239): FATAL EXCEPTION: main
02-07 18:32:46.806: E/AndroidRuntime(20239): java.lang.NullPointerException
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.AbsListView.obtainView(AbsListView.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.ListView.makeAndAddView(ListView.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.ListView.fillDown(ListView.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.ListView.fillSpecific(ListView.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.ListView.layoutChildren(ListView.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.AbsListView.onLayout(AbsListView.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.FrameLayout.onLayout(FrameLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.FrameLayout.onLayout(FrameLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.FrameLayout.onLayout(FrameLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:690)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.FrameLayout.onLayout(FrameLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.FrameLayout.onLayout(FrameLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.LinearLayout.setChildFrame(LinearLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.LinearLayout.onLayout(LinearLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.LinearLayout.setChildFrame(LinearLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.LinearLayout.layoutVertical(LinearLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.LinearLayout.onLayout(LinearLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.FrameLayout.onLayout(FrameLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.widget.FrameLayout.onLayout(FrameLayout.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.View.layout(View.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.Choreographer$CallbackRecord.run(Choreographer.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.Choreographer.doCallbacks(Choreographer.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.Choreographer.doFrame(Choreographer.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.os.Handler.handleCallback(Handler.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.os.Handler.dispatchMessage(Handler.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.os.Looper.loop(Looper.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at android.app.ActivityThread.main(ActivityThread.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at java.lang.reflect.Method.invokeNative(Native Method)
02-07 18:32:46.806: E/AndroidRuntime(20239): at java.lang.reflect.Method.invoke(Method.java:511)
02-07 18:32:46.806: E/AndroidRuntime(20239): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
02-07 18:32:46.806: E/AndroidRuntime(20239): at dalvik.system.NativeStart.main(Native Method)
Any help would be appreciated.
Okay, here's my code of Adapter
private class FileAdapter extends BaseAdapter {
private final Context mContext;
private final Bitmap mFolderBitmap, mFileBitmap;
FileAdapter(Context context) {
mContext = context;
addHeader();
mFolderBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_folder);
mFileBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_file);
}
public void addHeader() {
// add empty view with height of ActionBar
View view = new View(mContext);
view.setLayoutParams(new AbsListView.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
MainActivity.ACTIONBAR_HEIGHT));
getListView().addHeaderView(view);
}
@Override
public int getCount() {
return mFileList.size();
}
@Override
public Object getItem(int position) {
return mFileList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
multiChoiceListener.refresh();
}
public void setChecked(View view) {
if (view != null) {
view.setBackgroundColor(getResources().getColor(R.color.BLUE));
}
}
public void setUnchecked(View view) {
if (view != null) {
view.setBackgroundColor(getResources().getColor(R.color.WHITE));
}
}
public void setChecked(int pos) {
View view = getChildAt(getListView(), pos);
setChecked(view);
}
public void setUnchecked(int pos) {
View view = getChildAt(getListView(), pos);
setUnchecked(view);
}
private View getChildAt(AbsListView listView, Integer position) {
return listView.getChildAt(position + 1
- listView.getFirstVisiblePosition());
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
final ViewHolder vh;
if (convertView == null) {
vh = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(
R.layout.file_fragment_list_item, parent, false);
vh.iv = (ImageView) convertView.findViewById(R.id.fileIconView);
vh.tv = (TextView) convertView.findViewById(R.id.fileTextView);
convertView.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
vh.iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
multiChoiceListener.selectionChanged(position);
}
});
if (multiChoiceListener.isChecked(position)) {
setChecked(convertView);
} else {
setUnchecked(convertView);
}
final File file = mFileList.get(position);
if (file == null)
return null;
if (file.isDirectory()) {
vh.iv.setImageBitmap(mFolderBitmap);
} else {
vh.iv.setImageBitmap(mFileBitmap);
}
// Set text
vh.tv.setText(file.getName());
return convertView;
}
private class ViewHolder {
ImageView iv;
TextView tv;
}
}
Upvotes: 1
Views: 516
Reputation: 1171
You might be returning a null
view
in the getView()
function of the Adapter
. Make it return the correct view
Upvotes: 3