簡體   English   中英

除了onMapReady之外,如何在Google地圖中添加自定義標記

[英]How to add custom Marker in Google maps besides onMapReady

我正在努力解決一個問題。 如何在Google Maps Activity中實現添加標記的方法。

我想創建帶有兩個參數(緯度,經度)的方法,並在每次我restfull客戶給我新數據時在此位置添加標記。

我的問題實際上是我想堅持使用MVC約定。 當我將改造控制器包括到MapsActivity中時,一切正常。

當我從控制器向MapsActivity發送數據時,問題開始了(以NullPointerException結尾)。

MapsActivty:

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) {

        }
    });
}
}

感謝您的答復。

在下面更新您的MapsActivity代碼

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);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM