【问题标题】:Android map : add markersAndroid地图:添加标记
【发布时间】:2016-06-11 13:27:21
【问题描述】:

我有两个班级,一个在另一个里面。第一个类有一些管理地图的实现,在里面我已经完成了所有方法的 ovverride:

public class Principal extends AppCompatActivity implements
    OnMapReadyCallback,
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener,
    GoogleMap.OnMarkerDragListener,
    GoogleMap.OnMapLongClickListener,
    View.OnClickListener {

         //Our Map
          public GoogleMap mMap; 

          ...

          class PostAsync extends AsyncTask<String, String, JSONObject> {

                  ...

          }
}

在这个类中,我实现了第二个类,用于从数据库中获取数据。

class PostAsync extends AsyncTask<String, String, JSONObject> {}

数据库返回此类内部的一些坐标,我需要在 Principal 类的地图中添加一些标记。 问题:我无法从 PostAsync 类中添加标记。那我该怎么办?

谢谢。

【问题讨论】:

    标签: java android google-maps marker


    【解决方案1】:

    可以在主(UI)线程上添加标记,AsyncTaskonPostExecute 方法在主(UI)线程上执行。

    所以,根据你对PostAsync 类(extends AsyncTask&lt;String, String, JSONObject&gt;)的定义:

    class PostAsync extends AsyncTask<String, String, JSONObject> {
    
        // ...
    
        protected void onPostExecute(JSONObject result) {
            // Decode your JSONObject and add Markers to the map here
        }
    }
    

    【讨论】:

    • 谢谢,效果很好,我不知道标记只能在 onPostExecute() 上添加。 Se sei italiano,grazie!
    • 您不仅可以在onPostExecute 上添加标记,还可以在onPreExecuteonProgressUpdate 上添加标记,因为这些方法在主(UI)线程上执行。索诺·斯帕尼奥洛。准备 :)
    • 另外,如果此解决方案解决了您的问题,请考虑将其标记为已接受的答案,以便对其他人有所帮助
    • Yo soy medio espanol y medio italiano... creo que ya he votado la respuesta, con la flecha hacia arriba no?
    【解决方案2】:
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    
    }
    
    class PostAsync extends AsyncTask<String, String, JSONObject> {
    
        @Override
        protected void onPostExecute(JSONObject jsonObject) {
    
            ... // parse json
    
            MarkerOptions markerOptions = new MarkerOptions();
            LatLng latLng = new LatLng(20, 30);
            mMap.addMarker(markerOptions
                    .position(latLng)
                    .title("Title")
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
    
                    ...
        }
    }
    

    你会这样尝试吗?

    【讨论】:

    • doInBackground 在后台线程上调用,Markers 只能在主 (UI) 线程上添加到地图中。您将收到一个 Exception 执行此操作
    • 好的,如果我在 onPostExecute() 中添加标记就可以了,非常感谢
    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多