Java Android-NullPointerException

Java Android-NullPointerException,java,android,nullpointerexception,null-pointer,Java,Android,Nullpointerexception,Null Pointer,我得到一个NullPointerException,它破坏了这行代码: if (options.isVisible()) { 以下是代码块: protected static GoogleMap map; protected static MarkerOptions markerOptions; private OnMarkerCreateListener listener; public LazyMarker(GoogleMap map, MarkerOptions options) {

我得到一个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变量有关,但我不确定它是否正在中断,因为它没有被初始化?非常感谢您的帮助。

是的。运行时告诉您(通过抛出异常),现在您得到了人工确认。可以使用空构造函数初始化MarkerOptions。如果不需要对默认标记进行任何自定义,请传递新的MarkerOptions()


有关文档,请参阅此链接:

如果您能告诉我们从何处调用LazyMarker(),以及它在该类中的外观,那就太好了。我建议你在通话中用试一试的方式

try {
    ...
    marker = new LazyMarker(map, options, listener);
    ...
} catch (NullPointerException e) {
    e.printStackTrace();
}
如果这仍然不起作用,请确保检查您是否确实为变量定义了MarkerOptions对象


希望有帮助。

正如@Mzn所说,传递一个新的
标记选项()

你应该在那里做一个空检查

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

捕获
NPE
的周围代码不是答案。OP需要找出变量为
null
的原因,然后可能他没有为变量定义新的MarkerOptions对象?或者他在某个时候错误地将它设置为null?可能,我不知道构造函数是如何被调用的。但关键是你的答案不是很有效。不是想当混蛋只是想帮忙是的。那是一个非常坏的习惯。大多数时候捕捉
RuntimeException
s没有意义。必须通过修改代码来修复编程错误。是的!创建
LazyMarker
实例时,您正在传递
MarkerOptions
的空引用。如果您正在使用某些代码,首先不要以错误的方式修改它:
protectedstatic
private
非静态的原因。这种变化可能是您的问题的根本原因。无论如何,如果直接使用此类,请在创建
LazyMarker
时发送正确的参数。类似于
新标记选项().position(新板条(30,30))
。如果您将此类用作Android Maps Extensions的一部分,请向Google Map发送正确的参数。addMarker(MarkerOptions)
MarkerOptions
至少需要使用
LatLng
位置初始化。这并不能解决问题。它只是推迟了。