自定义ArrayAdapter的getView中的Nullpointerexception
我在我的应用程序的自定义ArrayAdapter中获得Nullpointerexception。 我不知道为什么Nullpointer在这里被提出。 而我无法重现这个例外。 这个异常没有出现很长时间,我没有更改代码,所以这使得它更奇怪。 代码是:
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方法引发异常。 我调试了我的应用程序,并用空参数调用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( BluetoothDeviceList.java:140)在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 .View.layout(View.java:7057)android.widget.FrameLayout.onLayout(FrameLayout.java:333)android.view.View.layout(View.java:7057)android.widget.LinearLayout.setChildFrame( 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)在com.android的java.lang.reflect.Method.invoke(Method.java:521)处的java.lang.reflect.Method.invokeNative(Native Method)。 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)
有没有人知道我能如何解决这个问题? 感谢帮助!!!
你可能正在用一个null
值来调用add
,并且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
不是null,因为它确实进入了android.widget.ArrayAdapter.getView()
。
您可以查看android.widget.ArrayAdapter.createViewFromResource
行355的源代码,尝试确定空指针的真正原因。
UPDATE
我偷看了代码,它在这行上失败text.setText(item.toString());
所以text
或item
都是空的。
你可以在这里看看自己的代码:android.widget.ArrayAdapter source
链接地址: http://www.djcxy.com/p/16629.html