自定义ArrayAdapter的getView中的Nullpointerexception

我在我的应用程序的自定义ArrayAdapter中得到Nullpointerexception。 我不知道为什么Nullpointer在这里被提出。 而我不能重现这个例外。 这个exception没有出现很长时间,我没有代码的变化,所以这使得它更奇怪。 代码是:

private class MyAdapter<T> extends ArrayAdapter<String> { private Map<String, String> selectedDevices; public MyAdapter(Context context, int textViewResourceId) { super(context, textViewResourceId); BluetoothDbAdapter dbHelper = new BluetoothDbAdapter(context); dbHelper.open(); selectedDevices = dbHelper.fetchAllDevicesAsMap(); dbHelper.close(); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); CheckedTextView item = (CheckedTextView) view; CharSequence text = item.getText(); if (selectedDevices.values().contains(text)) { item.setChecked(true); } return item; } } 

第一行中的getView方法引发exception。 我debugging了我的应用程序,并调用super.getView参数为空,但没有Nullpointerexception被提出,所以它似乎超级已经是空的,但这怎么可能? StackTrace是:

java.lang.NullPointerException at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)at de.hartig.abt.activity.BluetoothDeviceList $ MyAdapter.getView(在Android.widget.AbsListView.obtainView(AbsListView.java:1408)android.widget.ListView.makeAndAddView(ListView.java:1727)android.widget.ListView.fillDown(ListView.java:652) )在android.widget.ListView.fillFromTop(ListView.java:709)在android.widget.ListView.layoutChildren(ListView.java:1580)在android.widget.AbsListView.onLayout(AbsListView.java:1240)在android.view在android.widget.Lineout.setChildFrame的android.view.View.layout(View.java:7057)android.widget.FrameLayout.onLayout(FrameLayout.java:333).View.layout(View.java:7057) LinearLayout.java:1249)在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)在android.widget.LinearLayout.onLayout(LinearLayout.java:1042)在android.view.View 在android.view.View.layout(View.java:7057)android.view.ViewRoot.performTraversals(ViewRoot。)android.widget.FrameLayout.onLayout(FrameLayout.java:333).layout(View.java:7057)在Android.os.Looper.loop(Looper.java:123)在android.os.Handler.dispatchMessage(Handler.java:99)在android.view.ViewRoot.handleMessage(ViewRoot.java:1727) android.app.ActivityThread.main(ActivityThread.java:4680)at java.lang.reflect.Method.invokeNative(Native Method)at com.android上的java.lang.reflect.Method.invoke(Method.java:521)。 internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)at dalvik.system.NativeStart.main(Native Method)

有没有人知道我能如何解决这个问题? 感谢帮助!!!

Solutions Collecting From Web of "自定义ArrayAdapter的getView中的Nullpointerexception"

你可能正在调用add一个null值和ArrayAdapter窒息它。 为了进一步诊断问题,我们需要查看fetchAllDevicesAsMap的代码或者将元素添加到ArrayAdapter

从CreateViewFromResource里面的ArrayAdapter.java摘录:

 T item = getItem(position); if (item instanceof CharSequence) { text.setText((CharSequence)item); } else { text.setText(item.toString()); } 

这表明如果基础数组中的某个元素为null ,则ArrayAdapter将屈服于NullPointerException

从堆栈跟踪,你可以清楚地看到, super不是空的,因为它进入android.widget.ArrayAdapter.getView()

您可以查看android.widget.ArrayAdapter.createViewFromResource行355的源代码,尝试确定空指针的真正原因。

UPDATE

我偷看了代码,它在这行失败text.setText(item.toString()); 所以textitem都是空的。

你可以在这里看看自己的代码: android.widget.ArrayAdapter source