2013-05-07 59 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

相关问题