当2条件为真时从JSON获取值

时间:2018-04-30 05:43:25

标签: java android json google-maps

我在我的应用程序中使用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个值为true,则从我的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);
}

是否有人处理过这个问题,有人可以澄清一下这是怎么回事吗?

1 个答案:

答案 0 :(得分:1)

尝试:

imgView.contentMode = .scaleAspectFit //Or any from below options

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

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