在我的应用程序中,我有一个按钮,它从数据库中提取经度和纬度,并将它们存储到存储在名为bgworker的类中的两个变量中,然后这些变量显示在屏幕上,如下所示:https://i.stack.imgur.com/6HF0O.png
然后,我将变量发送到我的谷歌地图片段中,代码为:
public static void UpdateMap() {
double Longitute = parseDouble(bgWorker.ReturnLong());
double Latitude = parseDouble(bgWorker.ReturnLat());
LatLng Location = new LatLng(Latitude, Longitute);
googleMap.addMarker(new MarkerOptions().position(Location).title("The location"));
googleMap.moveCamera(CameraUpdateFactory.newLatLng(Location));
}
然而,地图片段本身从不更新,坐标始终设置为0,0每当变量更新时(点击按钮(,我如何更新地图上的位置
我遇到的两个问题是,如果我将Googlemap设为全局,则Googlemap为空,并且我得到错误
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)' on a null object reference
然而,如果我将Googlemap设为本地,我就无法从父方法中的按钮传递它,或者至少,我不知道如何传递
我在网上看过的大多数教程都是关于用用户的当前位置更新地图的,而不是静态变量。
请帮我更新我的地图位置点击!
我有一个想法,让你的Googlemap成为本地的,并在onclick中传递函数中的Googlemap,所以把你的UpdateMap更改为
public static void UpdateMap(GoogleMap map) {
double Longitute = parseDouble(bgWorker.ReturnLong());
double Latitude = parseDouble(bgWorker.ReturnLat());
LatLng Location = new LatLng(Latitude, Longitute);
map.addMarker(new MarkerOptions().position(Location).title("The location"));
map.moveCamera(CameraUpdateFactory.newLatLng(Location));
}
//and onClickListener Pass Goole Map
Your_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UpdateMap(googleMap)
}
});
不确定这是否在SO规则范围内,但对于未来有同样问题的人,我得到的答案是将GoogleMap片段存储在与按钮相同的活动中,使按钮使用startActivity(getIntent());
刷新整个活动,然后在GoogleMap活动中获取坐标。
这意味着每次加载谷歌地图时,它都会获取新的坐标,并将自己刷新到新的位置!我的错误是每次按下按钮都试图创建一个新的谷歌地图,你只需要一个。