我正在构建一个Android应用,我在其中下载包含要在GoogleMap上显示的内容的XML文件。信息窗口是可点击的,所以为了区分我使用Hashmap的不同窗口。
每当地图加载时,它都会因NullPointerException而崩溃。 hashmap名为markerEntryHashMap,这里有一些代码:
private class DownloadXmlTask extends AsyncTask<String, Void, String> {
/**
* Hashmap with marker; String ids as key, entry obj as value
*/
private HashMap<String, CurvitVacatureXmlParser.Entry> markerEntryHashMap;
@Override
protected String doInBackground(String... urls) {
[...]
}
@Override
protected void onPostExecute(String result) {
for (CurvitVacatureXmlParser.Entry entry : mapEntries) {
[...]
Log.d(TAG, "Marker ID: " + m.getId()); // OK; Marker ID: m0
Log.d(TAG, "Entry ID: " + entry.id); // OK; Entry ID: 12
// there is no unique identifier in an info-window so I thought using the hashmap to differentiate later on in an OnInfoWindowClickListener
// This crashes: FATAL EXCEPTION: main java.lang.NullPointerException
markerEntryHashMap.put(m.getId(), entry);
}
}
}
你们这些人/女孩发现了这个错误吗?
答案 0 :(得分:3)
您必须初始化HashMap
更改
private HashMap<String, CurvitVacatureXmlParser.Entry> markerEntryHashMap;
到
private HashMap<String, CurvitVacatureXmlParser.Entry> markerEntryHashMap = new HashMap<>();
答案 1 :(得分:1)
您尚未初始化HashMap,您可以将其初始化 for循环之前的onPreExecute或onPostExecute如下:
private class DownloadXmlTask extends AsyncTask<String, Void, String> {
/**
* Hashmap with marker; String ids as key, entry obj as value
*/
private HashMap<String, CurvitVacatureXmlParser.Entry> markerEntryHashMap;
@Override
protected String doInBackground(String... urls) {
[...]
}
@Override
protected void onPostExecute(String result) {
markerEntryHashMap=new HashMap<String,CurvitVacatureXmlParser.Entry>();
for (CurvitVacatureXmlParser.Entry entry : mapEntries) {
[...]
Log.d(TAG, "Marker ID: " + m.getId()); // OK; Marker ID: m0
Log.d(TAG, "Entry ID: " + entry.id); // OK; Entry ID: 12
// there is no unique identifier in an info-window so I thought using the hashmap to differentiate later on in an OnInfoWindowClickListener
// This crashes: FATAL EXCEPTION: main java.lang.NullPointerException
markerEntryHashMap.put(m.getId(), entry);
}
}
}