【问题标题】:Get value from JSON when 2 condition are true当 2 个条件为真时从 JSON 获取值
【发布时间】:2018-10-10 04:45:20
【问题描述】:

我在我的应用程序中使用 Google 地图,并通过从 JSON 获取纬度和经度向地图添加标记,我的 JSON 如下所示:

[
  {
    "name": "Hotel 1"
    "lat": "39.323523",
    "long": "-3.036840"
  },
  {
    "name": "Hotel 2"
    "lat": "39.323523",
    "long": "-2.937963"
  }
]

这很好用,标记已按应有的方式设置。现在,当我点击标记时,我会得到纬度和经度,但会执行以下操作:

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

            //Getting the lat and long based on marker position clicked
            Double latitude = marker.getPosition().latitude;
            Double longitude = marker.getPosition().longitude;

            return false;
        }
    });

这也很好,每当我点击标记时,我都会得到正确的纬度和经度。


这是我的问题开始的地方;如果 2 个值是真的,我现在要做的是从我的 JSON 文件中获取名称。在我的mMap.setOnMarkerClickListener 我称之为:

getInfoJson("39.323523", "-3.036840");

所以,如果纬度是39.323523,经度是-3.036840,那么我想得到名字。

这是我的方法:

private void getInfoJson(final String lati, final String longi) {
    StringRequest stringRequest = new StringRequest(Request.Method.GET,
            URL_DATA,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {                        
                    try {
                        JSONArray array = new JSONArray(s);
                        for (int i = 0; i < array.length(); i++) {
                            JSONObject o = array.getJSONObject(i);
                            //Getting lat and long from JSONObject
                            mLat = o.getString("lat");
                            mLong = o.getString("long");
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Toast.makeText(getContext(), volleyError.getMessage(), Toast.LENGTH_LONG).show();
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.add(stringRequest);
}

有人处理过这个问题吗?有人可以澄清一下这是怎么可能的吗?

【问题讨论】:

  • 使用String类的.equals方法。
  • 只是确认一下,GET 请求会获取您想要解析的 JSON 数组,以查看纬度和经度是否匹配?如果他们想返回名字?
  • @casualcoder 抱歉,我错过了您的评论,是的,这正是我想要实现的目标。

标签: java android json google-maps


【解决方案1】:

试试:

private void getInfoJson(final String lati, final String longi) {
    StringRequest stringRequest = new StringRequest(Request.Method.GET,
            URL_DATA,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {                        
                    try {
                        JSONArray array = new JSONArray(s);
                        for (int i = 0; i < array.length(); i++) {
                            JSONObject o = array.getJSONObject(i);
                            //Getting lat and long from JSONObject
                            mLat = o.getString("lat");
                            mLong = o.getString("long");
                            if(lati.equals(mLat) && longi.equals(mLong)) 
                            {
                               //get name here
                               name = o.getString("name");
                            }else {

                            }
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Toast.makeText(getContext(), volleyError.getMessage(), Toast.LENGTH_LONG).show();
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.add(stringRequest);
}

************** 编辑 *****************

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

            GoogleMap.OnMarkerClickListener listener = (GoogleMap.OnMarkerClickListener) marker.getTag();

            //Getting the lat and long based on marker position clicked
            Double latitude = marker.getPosition().latitude;
            Double longitude = marker.getPosition().longitude;

            getInfoJson(latitude, longitude);

            return listener != null && listener.onMarkerClick(marker);
        }
    });

【讨论】:

  • 感谢您的回答,我试过了,无论点击什么标记它都会返回名称,我只想在选择具有相应经度和经度的标记时返回名称。
  • 现在它只在点击一个标记时返回,我认为问题可能是因为 for 循环应该被打破break;??
  • @ClassA 也尝试在点击列表中输入日志,看看是否每次都拉长
  • @ClassA 在这个答案中,我已经检查了地图 lat long 和 json lat long 如果两者都匹配然后获取名称,否则我什么也没做。所以在这种情况下,只有当两个 lat long 匹配时才会返回名称。这就是你需要的吗?
  • 让我用我的尝试和结果更新我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 2022-01-02
  • 2019-03-10
  • 2019-12-26
相关资源
最近更新 更多