2014-09-03 53 views
0

在將字符串地址轉換爲LatLng後,我正在使用下面的代碼嘗試將標記添加到位置。但該應用程序總是崩潰與NPE錯誤。我試過調試,它顯示了由評論顯示的錯誤。我確認沒有使用那裏的變量爲空。任何人有任何想法我做錯了什麼?使用映射片段時總是返回NPE

public LatLng getLocationFromAddress(String strAddress) { 
      Geocoder coder = new Geocoder(this); 
      List<Address> address; 
      LatLng p1 = null; 
      try { 
      address = coder.getFromLocationName(strAddress, 5); 
      if (address != null && address.size() > 0) { 
       Address location = address.get(0); 
       p1 = new LatLng(location.getLatitude(), location.getLongitude()); 
      } else { 
       p1 = new LatLng(19.111258, 72.908313); 
      } 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return p1; 
      } 
      return p1; 
     } 

     public void prepareMap() { 
      final LatLng REST = getLocationFromAddress(restAddress + "," 
        + restLocation); 
      int zoomNiveau = 15; 
      map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
        .getMap(); 
      map.addMarker(new MarkerOptions().position(REST).title(restName));//error points here 
      map.moveCamera(CameraUpdateFactory.newLatLngZoom(REST, zoomNiveau)); 
    } 
+0

如果沒有空變量就不會有錯誤。請在錯誤行之前記錄'map','REST'和'restName'。你問題中的輸出會很好。 – Simas 2014-09-03 19:03:53

回答

0

有一些事情可能會導致NPE - 我會分開它,所以你可以縮小這個問題。

map.addMarker(new MarkerOptions().position(REST).title(restName)); 

可以改成...

MarkerOptions options = new MarkerOptions(); 
options.position(REST); 
options.title(restName); 
map.addMarker(options); 

其餘變量看起來好像沒什麼問題,所以我的選擇將是「地圖」或「restName」上。

注意從MapFragment Android的文檔以下內容:

If a GoogleMap is not available, getMap() will return null.