首页 文章

无法在Google Map 上看到多个标记

提问于
浏览
2

我想在谷歌 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 回答

  • 0

    我在这看到一些问题 .

    正如@Raghunandan所提到的,您无法从doInBackground()更新UI,因此您无法从那里添加标记 . 但是,您可以在此处制作MarkerOptions对象,然后将其附加到postExecute /或托管Google Map 的活动中的GoogleMap .

    在onPostExecute()中,您没有为标记设置任何 Headers 或代码段 . 无论何时创建标记,请务必设置 Headers . 然后,当用户单击标记时,默认行为会将您的其余名称显示为 Headers . 代码将是这样的(@Inzimam Tariq IT也提到:

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

    这可能是由于onPostExecute()中googleMap对象的不可达性造成的 . 请确保全局声明googleMap .

    如果可能请粘贴整个代码以便更好地评估

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

相关问题