2013-05-07 60 views
0

我理解的是打破在這一行代碼一個NullPointerException:Android的 - NullPointerException異常

if (options.isVisible()) { 

這裏是代碼塊:我猜

protected static GoogleMap map; 
protected static MarkerOptions markerOptions; 
private OnMarkerCreateListener listener; 

public LazyMarker(GoogleMap map, MarkerOptions options) { 
    this(map, options, null); 
} 

public LazyMarker(GoogleMap map, MarkerOptions options, OnMarkerCreateListener listener) { 
    if (options.isVisible()) { 
     createMarker(map, options, listener); 
    } else { 
     this.map = map; 
     this.markerOptions = copy(options); 
     this.listener = listener; 
    } 
} 

它做與MarkerOptions變量,但我不知道它是否因爲它沒有被初始化而中斷?任何幫助將不勝感激。

+1

是的!創建LazyMarker實例時,您正在傳遞'MarkerOptions'的空引用。 – yugidroid 2013-05-07 21:17:01

+0

如果你正在使用一些代碼,首先不要以不好的方式修改它:'protected static'有一個很好的原因是'private'非靜態的。這種變化可能是你問題的根源。無論如何,如果你直接使用這個類,在創建'LazyMarker'時發送一個正確的參數。像'新的MarkerOptions()。位置(新的LatLng(30,30))''。如果您將此類用作Android地圖擴展的一部分,請將正確的參數發送到'GoogleMap.addMarker(MarkerOptions)'。 – 2013-07-26 13:50:36

回答

0

是的。運行時告訴你(通過拋出異常),現在你只是得到了人的確認。您可以用空的構造函數初始化MarkerOptions。如果您不需要對默認標記進行任何自定義,則傳遞一個新的MarkerOptions()。

請參閱此鏈接文檔:https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/MarkerOptions

+0

'MarkerOptions'需要至少用'LatLng'位置初始化。 – 2013-07-26 13:44:01

0

如果你能告訴我們你在哪裏調用從LazyMarker()和它的外觀是類裏面,這將是巨大的。我建議你用try-catch包圍呼叫。

try { 
    ... 
    marker = new LazyMarker(map, options, listener); 
    ... 
} catch (NullPointerException e) { 
    e.printStackTrace(); 
} 

如果仍然不工作,一定要檢查你實際上是定義的MarkerOptions反對變量。

希望它有幫助。

+3

捕捉「NPE」的周圍代碼不是答案。 OP需要找出變量爲什麼爲'null' – codeMagic 2013-05-07 20:59:10

+0

然後,也許他沒有爲變量定義一個新的MarkerOptions對象?或者,也許他錯誤地將它設置爲空? – 2013-05-07 21:08:41

+0

也許,我不知道如何調用構造函數。但重要的是你的答案不是很有效。不試圖成爲一個混蛋..只是試圖幫助 – codeMagic 2013-05-08 00:20:46

1

正如@Mzn說,通過一項新MarkerOptions()

你應該做一個空檢查有

if (options!=null &&options.isVisible()) { 
+0

這不能解決問題。它只推遲它。 – 2013-07-26 13:46:04

相關問題