Java 方法在OnResume()中有效,但在OnCreate()中无效

Java 方法在OnResume()中有效,但在OnCreate()中无效,java,android,oncreate,onresume,Java,Android,Oncreate,Onresume,我有一个小应用程序来获取位置,然后在地图上显示它 在onCreate()中,我启动LocationService和地图。然后我想调用我的setLocation()方法来确定我的位置并在地图上显示它 如果我从onCreate()调用setLocation()方法,它将不起作用,并且会显示toast。如果我从onResume()调用setLocation(),它会工作。原因可能是什么 资料来源: 谢谢你的帮助。如果您需要代码其余部分的某一部分,请告诉我。切勿通过构造函数自己创建服务实例。GPSSer

我有一个小应用程序来获取位置,然后在地图上显示它

onCreate()
中,我启动LocationService和地图。然后我想调用我的
setLocation()
方法来确定我的位置并在地图上显示它

如果我从
onCreate()
调用
setLocation()
方法,它将不起作用,并且会显示toast。如果我从
onResume()
调用
setLocation()
,它会工作。原因可能是什么

资料来源:


谢谢你的帮助。如果您需要代码其余部分的某一部分,请告诉我。

切勿通过构造函数自己创建服务实例。
GPSService
根本没有存在的理由,更不用说成为
服务了。也就是说,
getPos()
将返回
null
,直到您得到位置修复。确切的时间是不确定的

同样,切勿通过构造函数自己创建活动实例。
MapsActivity
根本没有存在的理由,更不用说成为
活动的实际子类了。也就是说,
MainActivity
中的
mapActivity
字段将为
null
,直到调用
onMapSync()
。具体何时发生也不确定

因此,您无法从
onCreate()
onResume()
可靠地调用
setLocation()
。毕竟,你可能永远也找不到真正的位置

此外,如果您的
targetSdkVersion
为23或更高,您的应用程序将在Android 6.0+设备上崩溃,因为您甚至在请求运行时许可之前就试图获取位置,更不用说授予它了

您的
mapActivity.moveCamera(location)
呼叫只有在您拥有位置和地图后才能进行。您需要安排在
onMapReady()
onLocationChanged()
中查看您是否拥有这两段数据,然后调用
mapActivity.moveCamera(位置)


另外,FWIW,您的
WRITE\u EXTERNAL\u存储
元素在清单中的位置不正确
元素必须是根
元素的直接子元素,而不是

的子元素。我们不知道
mapActivity
是什么,我们不知道
GPSService
是什么,我们不知道
GPSService
上的
getPos()
是什么,etc.添加了整个源代码您是否尝试过在带有断点的服务调用中使用调试器来查看返回位置为null的原因?另外,您使用GPS服务的方式似乎也很无用,因为您可以使用同步方法调用直接从活动访问它。看起来,在setLocation之后调用OnMapReady(),因此mapActivity是空的,尽管我首先创建了mapFragment,这是什么原因呢?首先感谢你的回答,我是Android开发新手,我对这样的建议很满意。所以你建议把这些都放在main活动中,而不是把它分成几个类?“我怎样才能确保所有东西都按正确的顺序被调用?”@strange matter:“所以你建议把它们都放在MainActivity中,而不是把它们分成几个类?”——就你目前拥有的功能级别而言,我看不出额外的类给你带来了什么好处。“我怎样才能确保每件事都按正确的顺序被调用?”——好吧,在很大程度上,这是由经验决定的。从技术上讲,让
onMapReady()
onLocationChanged()
调用一些常见方法,查看您是否满足了这两个要求(地图+位置),一旦满足了这两个要求,该方法就会调用
moveCamera()