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

HashMap:java.lang.NullPointerException:尝试调用虚拟方法';java.lang.Object java.util.HashMap.put';,java,android,hashmap,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 当

我已经初始化了
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
方法时

这是我的密码:

公共类InitLocationsOnStartup扩展应用程序实现LocationListener{
HashMaplocationList;
列出站点;
@凌驾
public void onCreate(){
super.onCreate();
stations=新阵列列表();
locationList=新HashMap<>();//
}
公共站点(列表<站点视图模型>列表){
本站=列表;
添加位置(位置列表);
}
公共HashMapaddLocation(HashMaplocationList){
对于(int i=0;i
在这种情况下,在执行
onCreate()
方法之前调用
addLocation

我猜您正在访问一个不受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);

在清单中注册了您的
InitLocationsOnStartup
?是的,我在post complete错误消息和代码中注册了。您是否尝试过调试?出于某种原因,您的locationList似乎为空(即使您在onCreate()中初始化了它)。整个错误大约在顶部。但我在addLocation()中添加了更多代码@Pavneet_SinghThanks谢谢你的回答。我想在Runnable类中使用。那么我需要更改此代码吗?可能像getInitLocationsOnStartup(Runnable Runnable)@更多您将始终需要有一个对
android.app.Activity
android.app.Service
的引用才能调用
getApplication()
方法。
Runnable
对您没有帮助,因为它既不是一种活动,也不是一种服务,您可以通过它获得启动时正确的
InitLocationsOnStartup
实例。但是,如果您实现的Runnable引用了
android.app.Activity
android.app.Service
,那么您可以使用该引用调用
getApplication()
@more换句话说:确保您创建的
Runnable
对象引用了Android活动或Android服务,以便您可以从其中任何一个调用
getApplication()
方法。感谢您所做的一切!@非常欢迎您:)