Java 除了onMapReady之外,如何在谷歌地图中添加自定义标记
我在努力回答一个问题。如何在Google Maps活动中实现添加标记的方法 我想创建一个带有两个参数(lat,lon)的方法,并在每次restfull客户机给我新数据时添加标记 我的问题是,事实上,我想留在MVC大会。 当我将控制器改装到MapsActivity中时,一切正常 当我将数据从控制器发送到MapsActivity时,问题就开始了(以NullPointerException结束) 地图活动:Java 除了onMapReady之外,如何在谷歌地图中添加自定义标记,java,android,google-maps,Java,Android,Google Maps,我在努力回答一个问题。如何在Google Maps活动中实现添加标记的方法 我想创建一个带有两个参数(lat,lon)的方法,并在每次restfull客户机给我新数据时添加标记 我的问题是,事实上,我想留在MVC大会。 当我将控制器改装到MapsActivity中时,一切正常 当我将数据从控制器发送到MapsActivity时,问题就开始了(以NullPointerException结束) 地图活动: public class MapsActivity extends FragmentActiv
public class MapsActivity extends FragmentActivity implements
OnMapReadyCallback {
private GoogleMap mMap;
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
public void onCarChangeLocation(Double lat, Double lon) {
LatLng carLatLng = new LatLng(lat, lon);
mMap.addMarker(new MarkerOptions().position(carLatLng).title("Integra Location"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(carLatLng, 15.5f));
}
public Runnable getDataRunnable = new Runnable() {
@Override
public void run() {
Controller controller = new Controller();
controller.getData();
mHandler.postDelayed(this,1000);
}
};
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
getDataRunnable.run();
}
}
控制器:
public class Controller {
public static final String BASE_URL = "server_ip";
private static Retrofit retrofit = null;
public Double lat;
public Double lon;
public void getData() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
Call<OutputModel> call = jsonPlaceHolderApi.getCords();
call.enqueue(new Callback<OutputModel>() {
@Override
public void onResponse(Call<OutputModel> call, retrofit2.Response<OutputModel> response) {
if (!response.isSuccessful()) {
// onFailTV.setText("Code: " + response.code());
return;
}
// mMap.clear();
lat = response.body().getLatitude();
lon = response.body().getLongitude();
MapsActivity mapsActivity = new MapsActivity();
mapsActivity.onCarChangeLocation(lat, lon);
}
@Override
public void onFailure(Call<OutputModel> call, Throwable t) {
}
});
}
}
公共类控制器{
公共静态最终字符串BASE\u URL=“server\u ip”;
私人静态改装=空;
公共双lat;
公共双龙;
public void getData(){
如果(改装==null){
改装=新改装.Builder()
.baseUrl(基本URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
JsonPlaceHolderApi JsonPlaceHolderApi=reformation.create(JsonPlaceHolderApi.class);
Call Call=jsonPlaceHolderApi.getCords();
call.enqueue(新回调(){
@凌驾
公共void onResponse(呼叫,改装2.响应){
如果(!response.issusccessful()){
//onFailTV.setText(“代码:+response.Code());
返回;
}
//mMap.clear();
lat=response.body().getLatitude();
lon=response.body().getLongitude();
MapsActivity MapsActivity=新的MapsActivity();
地图活动性:方根位置(纬度、经度);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
}
感谢您的回复。更新您的地图活动代码,如下所示
public class MapsActivity extends FragmentActivity implements
OnMapReadyCallback {
private GoogleMap mMap;
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
getDataRunnable.run();
}
LatLng carLatLng;
public void onCarChangeLocation(Double lat, Double lon) {
if (mMap != null) {//Check here map is not initialized
carLatLng = new LatLng(lat, lon);
mMap.addMarker(new MarkerOptions().position(carLatLng).title("Integra Location"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(carLatLng, 15.5f));
} else {
carLatLng = new LatLng(lat, lon);
}
}
public Runnable getDataRunnable = new Runnable() {
@Override
public void run() {
Controller controller = new Controller();
controller.getData();
mHandler.postDelayed(this, 1000);
}
};
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
if (carLatLng != null) { //recall for setup pin
onCarChangeLocation(carLatLng.latitude, carLatLng.longitude);
}
}
}
它没有添加标记,但它是向前迈出的一步,因为npe消失了