尝试将String值添加到Adapter类中的HashMap时,我收到NullPointerException:
HashMap<String,String> map = new HashMap<String, String>();
....
public class ImageAdapter extends BaseAdapter {
....
//---Returns the number of images---
public int getCount() {
return getCursor.getCount();
}
....
//---Returns the ImageView view---
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null)
imageView = new ImageView(context);
else
imageView = (ImageView) convertView;
getCursor.moveToPosition(position);
int imageID = getCursor.getInt(columnIndex); //--- Returns unique ID --
String fileName = getCursor.getString(arrayIndex); //--- Returns filepath --
String imageValue = String.valueOf(imageID);
try {
map.put(imageValue, fileName);
} catch (NullPointerException e) {
Log.d("DEBUG", "Line154: " + e.toString());
e.printStackTrace();
}
Log.d("DEBUG", imageValue + " " + fileName);
我不明白这一点,因为上面的最后一行显示了正确的字符串值,为什么会出错呢?请指教。
答案 0 :(得分:0)
变量'map'是否已初始化?我无法看到它被设置或定义的位置,并且NullReference会导致我怀疑您要添加的地图为空。
答案 1 :(得分:0)
在哪里
HashMap<String,String> map = new HashMap<String, String>();
这是(下面)您向我们展示的嵌套课程吗?
public class ImageAdapter extends BaseAdapter {
如果是嵌套类,请向我们展示父类。如果没有放置
HashMap<String,String> map = new HashMap<String, String>();
在ImageAdapter类中
答案 2 :(得分:0)
您已初始化了&#39; HashMap&#39;课外。尝试在课堂内进行初始化&#39; ImageAdapter&#39;。
答案 3 :(得分:0)
Log.d("DEBUG", imageValue + " " + fileName);
最后一行显示正确的值,因为imageValue和fileName都是ImageAdapter类的成员变量。
然而,HashMap<String,String> map = new HashMap<String, String>();
没有在类中定义,因此错误。
答案 4 :(得分:0)
我建议你展示完整的代码和logcat。无论如何,您的代码中存在问题:
ImageView imageView;
if (convertView == null)
imageView = new ImageView(context);
else
imageView = (ImageView) convertView;
它永远不会在else块中运行。
答案 5 :(得分:0)
我现在可以自己回答 - 经过大量的额外研究。我们需要的是一个HashMap 全局范围(这就是我最初在课外宣布它的原因)。这样做的方法 是通过在更改后扩展Application类,如下面的代码中所示 XML清单允许这样做(参见Google开发):
try {
CustomHashMap thisMap = (CustomHashMap)getApplicationContext();
thisMap.addKeyValue(imageValue,fileName);
Log.d("DEBUG", "Line140 " + String.valueOf(thisMap.getSize()));
} catch (NullPointerException e) {
Log.d("DEBUG", "Line154: " + e.toString());
e.printStackTrace();
}
....
public static class CustomHashMap extends Application {
HashMap<String, String> myMap;
public CustomHashMap() {
super();
this.myMap = new HashMap<String, String>();
}
public HashMap getMap() {
return myMap;
}
public int getSize() {
return myMap.size();
}
public void addKeyValue(String x, String y) {
myMap.put(x,y);
}
}
LogCat行现在正确地指示每次迭代时单个HashMap的大小增加。