我有一个适用于多个4.4.2设备的自定义阵列适配器,但是当我使用蜂窝设备或模拟器设备进行测试时,它会让我的应用程序崩溃。
这是我的实施...... 首先,我用一个wifi连接名称填充一个字符串数组:
final ListView listview = (ListView) findViewById(R.id.listview);
final String[] values = new String[10];
for (int j = 0; j < wList.size(); j++) {
if (j < 10)
{
values[j] = "SSID: " + wList.get(j).SSID;
}
else {
break;
}
}
然后我将这些值添加到ArrayList ...
final ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < values.length; i++) {
list.add(values[i]);
}
然后我使用我的自定义适配器
final StableArrayAdapter adapter = new StableArrayAdapter(
TestWifiConnect.this,
R.layout.mytextview, list);
private class StableArrayAdapter extends ArrayAdapter<String> {
HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();
public StableArrayAdapter(Context context, int textViewResourceId,
List<String> objects) {
super(context, textViewResourceId, objects);
for (int i = 0; i < objects.size(); ++i) {
mIdMap.put(objects.get(i), i);
}
}
@Override
public long getItemId(int position) {
String item = getItem(position);
return mIdMap.get(item);
}
@Override
public boolean hasStableIds() {
return true;
}
}
当调用此方法时,我收到此错误
12-31 18:58:03.096: E/AndroidRuntime(5809): java.lang.NullPointerException
12-31 18:58:03.096: E/AndroidRuntime(5809): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
12-31 18:58:03.096: E/AndroidRuntime(5809): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
12-31 18:58:03.096: E/AndroidRuntime(5809): at android.widget.AbsListView.obtainView(AbsListView.java:1467)
12-31 18:58:03.096: E/AndroidRuntime(5809): at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
所以我的问题是,我做错了什么,为什么这会让我的程序崩溃?我已经研究了一段时间了,有些人指出要确保列表不是null ,但我不确定这是问题,因为它适用于某些设备,而不适用于其他设备。谢谢你的帮助。