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()
方法。感谢您所做的一切!@非常欢迎您:)