Hashmap无法访问

时间:2015-06-11 07:29:54

标签: java android

我正在构建一个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);
        }

    }
}

你们这些人/女孩发现了这个错误吗?

2 个答案:

答案 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);
        }

    }
}