无法在谷歌地图上看到多个标记

3
我想在Google地图上显示多个标记。我的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.title(restaurantName); // 在此处添加标题 markerOptions.icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); googleMap.addMarker(markerOptions); } }
}
请帮我解决这个问题。

你不能在 doInBackground() 中更新 UI。移除 Toast。 - Raghunandan
你可以使用一个字符串构建器,然后将结果返回。返回的结果是onPostExecute方法的参数。 - Raghunandan
please don't spoon-feed. - Yauraw Gadav
请问您能否提供一个示例?我想同时发送latlng和字符串,以便在标记上放置标题。 - user1659731
你可以使用一个字符串数组列表,将字符串添加到数组列表中,并在onPostExecute中使用相同的数组列表。 - Raghunandan
显示剩余2条评论
3个回答

0

我看到这里有几个问题。

正如@Raghunandan所提到的,您不能从doInBackground()更新UI,因此您无法从那里添加标记。但是,您可以在此处创建MarkerOptions对象,然后将它们附加到托管Google Maps的postExecute/或Activity中。

在您的onPostExecute()中,您没有为您的标记设置任何标题或片段。每当您创建标记时,请确保设置您的标题。然后,当用户单击标记时,默认行为会将您的餐厅名称显示为标题。代码将类似于这样(也由@Inzimam Tariq IT提到:

MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(res)
                .setTitle(restaurantName)
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
                googleMap.addMarker(markerOptions);

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

0

可能是由于在onPostExecute()中无法访问googleMap对象。 请确保googleMap在全局范围内声明。

如果可能,请粘贴整个代码以进行更好的评估。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接