java - HashMap: java.lang.NullPointerException: 尝试调用虚拟方法 'java.lang.Object java.util.HashMap.put'

标签 java android hashmap

<分区>

我已经初始化了HashMap#onCreate 方法,我想在addLocation 方法中使用HashMap。一切看起来都很好,但我不明白为什么会出现此错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.HashMap.put(java.lang.Object, java.lang.Object)' on a null object reference

当我调用 locationList#put 方法时。

这是我的代码:

public class InitLocationsOnStartup extends Application implements LocationListener {
    HashMap < String, Double[] > locationList;
    List < StationViewModel > stations;

    @Override
    public void onCreate() {
        super.onCreate();
        stations = new ArrayList < StationViewModel > ();
        locationList = new HashMap < > (); // 
    }

    public void getStations(List < StationViewModel > list) {
        this.stations = list;
        addLocation(locationList);
    }

    public HashMap < String, Double[] > addLocation(HashMap < String, Double[] > locationList) {
        for (int i = 0; i < stations.size(); i++) {
            latLong = new Double[] {
                Double.parseDouble(stations.get(i).getLatitude()),
                    Double.parseDouble(stations.get(i).getLongitude())
            };

            if (stations.get(i).getStationName() != null && latLong != null) {
                locationList.put(stations.get(i).getStationName(), latLong);

            }
        }
        return locationList;;
    }

最佳答案

在这种情况下,addLocationonCreate() 方法执行之前被调用。

我猜你正在访问一个 InitLocationsOnStartup 的实例,它不是由 Android 框架管理的。

如果你有这样的代码:

InitLocationsOnStartup startup = new InitLocationsOnStartup();
startup.addLocation(..., ...);

你将得到这个NullPointerException

访问此类的最佳方式应该是在 Android Activity 中使用

getApplication()

方法。您可以创建一个静态工厂方法来以安全的方式访问此对象,例如:

public static InitLocationsOnStartup getInitLocationsOnStartup(Activity activity) {
    return (InitLocationsOnStartup) activity.getApplication();
}

这应该会为您提供已由 Android 正确初始化的 InitLocationsOnStartup 类的正确实例。

然后可以在 Android Activity 中使用此方法,如下所示:

InitLocationsOnStartup startup = getInitLocationsOnStartup(this);

关于java - HashMap: java.lang.NullPointerException: 尝试调用虚拟方法 'java.lang.Object java.util.HashMap.put',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50075621/

相关文章:

java - 使用 lambdaj 实现多种排序条件

java - 如何在二维数组中存储日志参数

java - HashMap 的 containsKey 方法返回 false,但它的键是 integer[] 类型?

java - Jackson:Map的反序列化

java - 在HashMap中设置键类型,如何?

java - 将 MySQL json 列映射到 JPA 会引发错误

android - 当 Activity 恢复并重新启动时,VideoView 停止显示

android - Google Cloud Test Lab 是否支持 Appium 测试?

java - 在使用应用程序期间如何启用 android LED?

java - 如何在以编程方式选择项目时触发 ComboBox EventHandler?