我想在谷歌地图上显示多个标记。我的latlng是从Parse数据库获取的,但我无法看到标记 我的第二个问题是我想用标记显示标题是餐馆名称,以及我如何做到这一点。 这是我的代码
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); } } }
请帮帮我。
答案 0 :(得分:0)
可能是由于onPostExecute()中googleMap对象无法访问。 请确保全局声明googleMap。
如果可能请粘贴整个代码以获得更好的评估
答案 1 :(得分:0)
试试这个
// Create lat long points
Latlng[] point_new = new LatLng[8];
point_new[0] = new LatLng(31.5301843, 74.3207487);
point_new[1] = new LatLng(31.5214693,74.3236027);
point_new[2] = new LatLng(31.5194393, 74.3257327);
point_new[3] = new LatLng(31.4942166, 74.3004533);
point_new[4] = new LatLng(31.4864646, 74.2911203);
point_new[5] = new LatLng(31.4803596, 74.2787933);
point_new[6] = new LatLng(31.4764716, 74.2638203);
point_new[7] = new LatLng(31.4775236, 74.2628873);
// Add markers
for (int i = 0; i < point_new.length; i++) {
MarkerOptions markerOptions = new MarkerOptions()
.position(point_new[i]);
marker = mMap.addMarker(markerOptions);
marker.setTitle("Points");
marker.setSnippet("Distance = 9.6 km, Time = 20 minute/s");
marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.p));
}
//使用缩放级别9将相机设置为最后一个点
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(point_new[7], 9));
答案 2 :(得分:0)
我在这看到一些问题。
正如@Raghunandan所提到的,您无法从doInBackground()更新UI,因此您无法从那里添加标记。但是,您可以在此处制作MarkerOptions对象,然后将其附加到postExecute /或托管Google地图的活动中的GoogleMap。
在onPostExecute()中,您尚未为标记设置任何标题或代码段。无论何时创建标记,请务必设置标题。然后,当用户单击标记时,默认行为会将您的其余名称显示为标题。 代码将是这样的(正如@Inzimam Tariq IT提到的那样:
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(res)
.setTitle(restaurantName)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
googleMap.addMarker(markerOptions);