3

我想在谷歌地图上显示多个标记。我的latlng坐标是从 Parse 数据库中获取的,但我看不到标记。我的第二个问题是我想显示一个带有标记的餐厅名称的标题,我该怎么做?

这是我的代码:

私有类 putMarker 扩展 AsyncTask> {

        @覆盖
        受保护的 ArrayList doInBackground(Void... 参数) {
            // TODO 自动生成的方法存根
            尝试 {

                Toast.makeText(getApplicationContext(),
                        经度 + " " + 纬度,Toast.LENGTH_SHORT).show();

                ParseQuery 查询 = 新 ParseQuery(
                        “细节”);
                ParseGeoPoint myGeoPint = 新 ParseGeoPoint(纬度,
                        经度);
                query.whereNear("位置", myGeoPint);
                查询.setLimit(10);
                ob = 查询.find();
                for (ParseObject resObj : ob) {
                    ParseGeoPoint 位置 = resObj
                            .getParseGeoPoint("位置");
                    restaurantName = (String) resObj.get("RestaurantName");
                    LatLng resLatLng = new LatLng(location.getLatitude(),
                            location.getLongitude());
                    Toast.makeText(getApplicationContext(),
                            restaurantName, Toast.LENGTH_SHORT)
                            。节目();
                    PintList.add(resLatLng);
                }

            } 捕捉(异常 e){
                // TODO: 处理异常
            }
            返回点列表;
        }
        受保护的无效 onPostExecute(ArrayList latlngList){
            for(LatLng res: latlngList)
            {
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(res);
                markerOptions.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
                googleMap.addMarker(markerOptions);
            }
        }

    }

请帮帮我。

4

3 回答 3

0

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

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

于 2013-10-29T13:17:19.493 回答
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);
于 2018-04-17T20:31:50.563 回答
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));
于 2015-12-09T06:13:10.150 回答