2015-06-11 78 views
0

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

你可以发布你的空指针栈跟踪 – Babel

+2

你初始化了你的地图吗? 'markerEntryHashMap = new HashMap <>();' –

回答

3

你必须初始化你的HashMap

变化

private HashMap<String, CurvitVacatureXmlParser.Entry> markerEntryHashMap; 

private HashMap<String, CurvitVacatureXmlParser.Entry> markerEntryHashMap = new HashMap<>(); 
+0

就是这样,现在完美了!在10分钟内会给你你的业力... – Grrrben

1

您还没有初始化一个HashMap,您可以在 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); 
     } 

    } 
}