我想在谷歌 Map 上显示多个标记 . 我的latlng是从Parse数据库获取的,但我无法看到标记,我的第二个问题是我想用标记显示 Headers 为餐馆名称以及我如何能够做到这一点 . 这是我的代码
private class putMarker extends AsyncTask> {
@Override
protected ArrayList doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
Toast.makeText(getApplicationContext(),
longitude + " " + latitude, Toast.LENGTH_SHORT).show();
ParseQuery query = new ParseQuery(
"Details");
ParseGeoPoint myGeoPiont = new ParseGeoPoint(latitude,
longitude);
query.whereNear("location", myGeoPiont);
query.setLimit(10);
ob = query.find();
for (ParseObject resObj : ob) {
ParseGeoPoint location = resObj
.getParseGeoPoint("location");
restaurantName = (String) resObj.get("RestaurantName");
LatLng resLatLng = new LatLng(location.getLatitude(),
location.getLongitude());
Toast.makeText(getApplicationContext(),
restaurantName, Toast.LENGTH_SHORT)
.show();
PiontList.add(resLatLng);
}
} catch (Exception e) {
// TODO: handle exception
}
return PiontList;
}
protected void onPostExecute(ArrayList latlngList) {
for(LatLng res: latlngList)
{
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(res);
markerOptions.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
googleMap.addMarker(markerOptions);
}
}
}
请帮帮我 .
3 回答
我在这看到一些问题 .
正如@Raghunandan所提到的,您无法从doInBackground()更新UI,因此您无法从那里添加标记 . 但是,您可以在此处制作MarkerOptions对象,然后将其附加到postExecute /或托管Google Map 的活动中的GoogleMap .
在onPostExecute()中,您没有为标记设置任何 Headers 或代码段 . 无论何时创建标记,请务必设置 Headers . 然后,当用户单击标记时,默认行为会将您的其余名称显示为 Headers . 代码将是这样的(@Inzimam Tariq IT也提到:
这可能是由于onPostExecute()中googleMap对象的不可达性造成的 . 请确保全局声明googleMap .
如果可能请粘贴整个代码以便更好地评估
试试这个
//使用缩放级别9将相机设置为最后一个点