Android地图:添加标记

时间:2016-06-11 13:27:21

标签: java android google-maps marker

我有两个班,一个在另一个班里。第一个类有一些工具来管理地图,在其中我已经完成了所有方法的ovverride: 的

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

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

if (!empty($contacts['feed']['entry']))
    {
foreach($contacts['feed']['entry'] as $contact)
    {

    // retrieve user photo

    if (isset($contact['link'][0]['href']))
        {
        $url = $contact['link'][0]['href'];
        $url = $url . '&access_token=' . urlencode($accesstoken);
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_TIMEOUT, 15);
        curl_setopt($curl, CURLOPT_VERBOSE, true);
        $image = curl_exec($curl);
        curl_close($curl);
        }


    if ($image === 'Photo not found')
        {

        // retrieve Name and email address

        $return[] = array(
            'name' => $contact['title']['$t'],
            'email' => $contact['gd$email'][0]['address'],
            'img_url' => '//cdn.twkcdn.com/profile/image/avatar.png?w=40&h=40&cf',
        );
        }
      else
        {

        // retrieve Name and email address

        $return[] = array(
            'name' => $contact['title']['$t'],
            'email' => $contact['gd$email'][0]['address'],
            'img_url' => $url,
        );
        }
    }

$google_contacts = $return; //returning all d
}

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

                ...
    }
}

你会这样尝试吗?

答案 1 :(得分:1)

可以在主(UI)线程上添加标记,并且onPostExecute执行主(UI)线程的AsyncTask方法。

因此,根据您对PostAsync班级(extends AsyncTask<String, String, JSONObject>)的定义:

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

    // ...

    protected void onPostExecute(JSONObject result) {
        // Decode your JSONObject and add Markers to the map here
    }
}