当 2 个条件为真时从 JSON 获取值
Posted
技术标签:
【中文标题】当 2 个条件为真时从 JSON 获取值【英文标题】:Get value from JSON when 2 condition are true 【发布时间】: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 抱歉,我错过了您的评论,是的,这正是我想要实现的目标。
【参考方案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 匹配时才会返回名称。这就是你需要的吗?
让我用我的尝试和结果更新我的问题以上是关于当 2 个条件为真时从 JSON 获取值的主要内容,如果未能解决你的问题,请参考以下文章
当应该为真时,Android Studio 改造响应返回布尔值为假