我应该在哪里调用我的更新映射函数?我需要在我的异步任务之后调用它?

时间:2018-05-25 05:53:09

标签: java android google-maps android-asynctask

您好我是Android编程新手,我有一个应用程序,当用户点击某个国家/地区时,它会启动另一个活动,显示一个带有标记首都城市标记的地图。

但是我需要从我的异步任务方法获得资金。所以它需要返回国家信息然后我可以更新我的地图。我在onPost Execute中调用了我的更新地图方法,但应用程序只是崩溃了?

在我的创作

 mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync( this);


    new GetCountryDetails().execute(selectedCountry);

然后在我的异步任务中

private class GetCountryDetails extends AsyncTask<String, String, CountryInfo> {

    @Override
    protected CountryInfo doInBackground(String... params) {
       CountryInfo countryInfo = null;

在我的onPostExecute

protected void onPostExecute(CountryInfo countryInfo) {
    countryCapital=countryInfo.getCapital();

    updateMap(map);//doesn't work here

onMapReady:

public void onMapReady(GoogleMap map) {
    map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    map.getUiSettings().setMapToolbarEnabled(true);

updateMap

         public void updateMap(GoogleMap map){
    LatLng capitalCity = getCityLatitude(this, countryCapital);
       map.moveCamera(CameraUpdateFactory.newLatLng(capitalCity));

        MarkerOptions marker = new MarkerOptions().position(capitalCity).title( countryCapital);
        map.addMarker(marker);

    }

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

:=

答案 1 :(得分:0)

下面的代码片段对我来说非常适合。请试一试。

LatLngBean bean = new LatLngBean();
bean.setTitle(jobj.getString(""));
bean.setSnippet("Hello, " + jobj.getString(""));
bean.setLatitude(jobj.getString("latitude"));
bean.setLongitude(jobj.getString("longitude"));
arrayList.add(bean);
runOnUiThread(new Runnable() {
 @Override
  public void run() {
    mapFragment.getMapAsync(YourActivity.this);
  }
});

在onPostExecute方法

中添加以下代码
 @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    if (arrayList.size() > 0) {
        try {
            listLatLng = new ArrayList<>();
            for (int i = 0; i < arrayList.size(); i++) {
                final LatLngBean bean = arrayList.get(i);
                double lat = Double.parseDouble(bean.getLatitude());
                double lon = Double.parseDouble(bean.getLongitude());

                LatLng latLng = new LatLng(lat, lon);

                BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.salesman_map_icon);
                mMap.addMarker(new MarkerOptions()
                        .position(latLng)
                        .title(bean.getTitle())
                        .snippet(String.valueOf(i))
                        //.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
                        .icon(icon));
                mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                mMap.animateCamera(CameraUpdateFactory.zoomTo(17));
                LatLng object = new LatLng(lat, lon);
                listLatLng.add(object);
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }
  }

然后在mapReady()方法

上添加以下代码
select array(select generate_series(1,10) order by random());