【问题标题】:NullPointerException at Marker.setPosition()Marker.setPosition() 处的 NullPointerException
【发布时间】:2015-01-13 21:39:39
【问题描述】:

在下面的代码中,我得到了NullPointerException。我知道这意味着我在第 228 行使用的其中一件事是 null 而不是有效地址。但我不明白为什么。有什么我错过的吗?

public class MainActivity extends ActionBarActivity {

    LatLng xmyLL2;
    private Marker marker2;

    protected void onCreate(Bundle savedInstanceState) {
        marker2 = googleMap.addMarker(new MarkerOptions().
                position(xmyLL2).title("ver2"));
    }

    private class MyLocationListener implements LocationListener {
        public void onLocationChanged(Location location) {
            double xd2 = Double.parseDouble(xstr[2]);
            double xd3 = Double.parseDouble(xstr[3]);
            xmyLL2 = new LatLng( xd2, xd3 );
            marker2.setPosition(xmyLL2);  // this is line228
    }
}

line 228: marker2.setPosition(xmyLL2); 我得到了异常,这是堆栈跟踪:

MainActivity$MyLocationListener.onLocationChanged(Location) line: 228
LocationManager$ListenerTransport._handleMessage(Message) line: 279
LocationManager$ListenerTransport.access$000(LocationManager$ListenerTransport, Message) line: 208

【问题讨论】:

  • 什么叫做 onLocationChanged()?先有什么叫做 onCreate() 的东西吗?
  • 问题可能是尚未设置 Marker2。代码没有显示它是在哪里定义的,但是 onCreate() 方法实例化了它。必须先调用 onCreate() 方法,然后才能在其他任何地方使用它(除非有其他东西实例化它)。
  • 你应该避免在变量名的开头使用大写字母,它们看起来像类。
  • 我刚刚更正了复制的代码 - 原始代码一开始没有大写的变量。在 MainActivity() 中设置了 marker2。没有?
  • 整个问题现在更清楚了,请参阅下面 cmets 中的提示。如果你不明白,我会在午餐后编辑我的答案。

标签: java android nullpointerexception google-maps-markers


【解决方案1】:

似乎在 onCreate() 之前调用了 onLocationChanged()。

如果您可以控制这些,请确保先调用 onCreate。如果您没有控制权,可以使用if null 以避免异常,希望稍后在onCreate 发挥作用后再次调用它。

将行改为:

if (null != marker2) marker2.setPosition(xmyLL2);  // this is line228

【讨论】:

  • 你是对的。未设置marker2。我会设置一些喙点,让你知道更多。非常感谢。
  • 您一定想知道为什么位置在创建之前就发生了变化...(提示:googleMap.addMarker(new MarkerOptions().position(xmyLL2)) 的调用顺序是什么?)
  • 实际上有两个问题。我没有在上面发布它,但是有 - 并且必须 - 调用 locMngr.requestLocationUpdates()。最初我在初始化所有变量之前调用它。傻哈? :-)。但即使在我解决了这个问题之后 - 问题并没有消失。未完成初始化的第二个原因是在marker2 初始化期间发生的异常。这让我想到另一个问题:如何在 Eclipse 中查看 System.err 的内容?
  • 我现在可以继续了。非常感谢您的帮助,查理。
  • 很高兴你知道了。这是关于 system.err 的信息 - wiki.eclipse.org/…。如果您使用 maven 或类似的包/构建管理器,您可以在 Eclipse 控制台视图中获得输出
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 2013-04-19
  • 2019-06-28
  • 2015-04-12
  • 2011-07-02
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多