【问题标题】:Want to get details of place by clicking on the marker which are stored in HashMap想要通过单击存储在 HashMap 中的标记来获取地点的详细信息
【发布时间】:2017-08-26 08:47:57
【问题描述】:

此函数将json数据存储在hashmap中。

  private Map<MarkerOptions, JSONObject> markersMap = new HashMap<MarkerOptions, JSONObject>();



private void parseLocationResult(final JSONObject result) {

    String id, place_id = null, placeName = null, reference, icon, vicinity = null,location;
    JSONArray rev;
    double latitude;
    double longitude;

    try {
        final JSONArray jsonArray = result.getJSONArray(RESULTS);//JavaScript Object Notation

        if (result.getString(STATUS).equalsIgnoreCase(OK)) {

            mMap.clear();

            for (int i = 0; i < jsonArray.length(); i++) {
                final JSONObject place = jsonArray.getJSONObject(i);

                id = place.getString(SUPERMARKET_ID);
                place_id = place.getString(PLACE_ID);
                if (!place.isNull(NAME)) {
                    placeName = place.getString(NAME);
                }
                if (!place.isNull(VICINITY)) {
                    vicinity = place.getString(VICINITY);
                }
                latitude = place.getJSONObject(GEOMETRY).getJSONObject(LOCATION)
                        .getDouble(LATITUDE);
                longitude = place.getJSONObject(GEOMETRY).getJSONObject(LOCATION)
                        .getDouble(LONGITUDE);
                reference = place.getString(REFERENCE);
                icon = place.getString(ICON);


                MarkerOptions markerOptions = new MarkerOptions();
                final LatLng latLng = new LatLng(latitude, longitude);
                markerOptions
                        .icon(BitmapDescriptorFactory.fromResource(R.drawable.bluemarker))
                        .position(latLng);
                markerOptions.title(placeName + " : " + vicinity);


                mMap.addMarker(markerOptions);
                markersMap.put(markerOptions,place);


            }

            Toast.makeText(getBaseContext(), jsonArray.length() + " found!",
                    Toast.LENGTH_LONG).show();

        } else if (result.getString(STATUS).equalsIgnoreCase(ZERO_RESULTS)) {
            Toast.makeText(getBaseContext(), "Not found in 5KM radius!!!",
                    Toast.LENGTH_LONG).show();
        }

    } catch (JSONException e) {

        e.printStackTrace();
        Log.e(TAG, "parseLocationResult: Error=" + e.getMessage());
    }


}

现在,在这个函数中,我想获取存储在 hashMap 中的详细信息。稍后我将在之前的函数(parseLocationResult)中调用这个函数(ShowDetails)。 我已经声明了 json 对象。现在请告诉我如何在 ShowDetails 函数中获取详细信息,这些详细信息通过函数 parseLocationResult 存储在哈希图中。

 public void showdetails(final Place place)


{
    final JSONObject jsonObject=markersMap.get(markersMap);



    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {

            SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
            SharedPreferences.Editor editor = settings.edit();


            editor.putString("_PlaceID", place.getId());
            editor.putString("_name", (String) place.getName());
            editor.putString("_address", (String) place.getAddress());
            editor.putString("_webUri", String.valueOf(place.getWebsiteUri()));
            editor.putString("_PhoneNo", (String) place.getPhoneNumber());
            editor.putString("_Lat", String.valueOf(place.getLatLng().latitude));
            editor.putString("_Lng", String.valueOf(place.getLatLng().longitude));

            editor.putString("_rating",String.valueOf(place.getRating()));
            editor.apply();











            Intent i=new Intent(MapsActivity.this,infoWindow.class);
            startActivity(i);

            return false;
        }
    });

}

【问题讨论】:

    标签: android json hashmap


    【解决方案1】:

    改变你的

    private Map<MarkerOptions, JSONObject> markersMap = new HashMap<MarkerOptions, JSONObject>();
    

    private Map<Marker, JSONObject> markersMap = new HashMap<Marker, JSONObject>();
    

    然后像这样将标记存储在您的地图中:

    Marker marker = mMap.addMarker(markerOptions);
    markersMap.put(marker,place);
    

    稍后您可以像这样检索您的 Json:

    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
    
            JsonObject markersMap = markersMap.get(marker);
    
            return false;
        }
    });
    

    【讨论】:

    • OnMarkerClick(Marker marker) 函数中的“mHashMap”出现错误。
    • 我的名字错了,把名字改成你的hashMap名字(markersMap)
    • 现在我应该在哪里使用 markerMap,它是 onMarkerClick 中的一个 jsonobject,因为它仍未使用。
    • @ZiaAnsari 使用markersMap(onClickMarker 中的jsonObject)来获取你的数据!!!你想在 onMarkerClick 中得到什么?
    • 你能给我写一个示例代码吗?我想获取地图上显示的地点的数据。例如:如果我点击 A 餐厅,它应该向我显示餐厅 A 的详细信息,当我点击餐厅 B 时,它应该在 InfoWindow 中显示餐厅 B 等的位置。
    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多