我已初始化HashMap#onCreate
方法,我想在HashMap
方法中使用addLocation
。一切看起来都不错,但我不明白为什么我会收到这个错误:
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;;
}
答案 0 :(得分:1)
在这种情况下,addLocation
方法在执行onCreate()
方法之前被调用。
我猜你正在访问一个不受Android框架管理的InitLocationsOnStartup
实例。
如果您有以下代码:
InitLocationsOnStartup startup = new InitLocationsOnStartup();
startup.addLocation(..., ...);
您将获得此NullPointerException
。
访问此类的最佳方式应该是使用
进行Android活动getApplication()
方法。您可以创建一个静态工厂方法以安全的方式访问此对象,例如:
public static InitLocationsOnStartup getInitLocationsOnStartup(Activity activity) {
return (InitLocationsOnStartup) activity.getApplication();
}
这可以为您提供已被Android正确初始化的InitLocationsOnStartup
类的正确实例。
然后可以在Android活动中使用此方法:
InitLocationsOnStartup startup = getInitLocationsOnStartup(this);