Java 除了onMapReady之外,如何在谷歌地图中添加自定义标记

Java 除了onMapReady之外,如何在谷歌地图中添加自定义标记,java,android,google-maps,Java,Android,Google Maps,我在努力回答一个问题。如何在Google Maps活动中实现添加标记的方法 我想创建一个带有两个参数(lat,lon)的方法,并在每次restfull客户机给我新数据时添加标记 我的问题是,事实上,我想留在MVC大会。 当我将控制器改装到MapsActivity中时,一切正常 当我将数据从控制器发送到MapsActivity时,问题就开始了(以NullPointerException结束) 地图活动: public class MapsActivity extends FragmentActiv

我在努力回答一个问题。如何在Google Maps活动中实现添加标记的方法

我想创建一个带有两个参数(lat,lon)的方法,并在每次restfull客户机给我新数据时添加标记

我的问题是,事实上,我想留在MVC大会。 当我将控制器改装到MapsActivity中时,一切正常

当我将数据从控制器发送到MapsActivity时,问题就开始了(以NullPointerException结束)

地图活动:

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消失了