在android中使用json数组值的android地图标记
Posted
技术标签:
【中文标题】在android中使用json数组值的android地图标记【英文标题】:android map marker using json array values in android 【发布时间】:2021-08-05 18:31:54 【问题描述】:我需要使用从 JSONArray 获得的值来绘制地图标记。我使用了以下代码。当我直接传递纬度和经度值时它工作正常,但是当我传递从 JSONArray 获取的值时,地图没有被绘制出来。
StringRequest stringRequest = new StringRequest(Request.Method.POST,url,
new Response.Listener<String>()
@Override
public void onResponse(String response)
try
//converting the string to json array object
JSONObject object = new JSONObject(response);
if (object.getInt("status") == 200)
JSONArray jsonArray = object.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++)
JSONObject pobj = jsonArray.getJSONObject(i);
lat = Double.parseDouble(pobj.getString("latitude"));
lon = Double.parseDouble(pobj.getString("longitude")); pobj.getDouble("latitude")+","+pobj.getDouble("longitude");
Log.i("MAP",""+response);
Log.i("lat-",""+lat);
Log.i("lon-",""+lon);
catch (JSONException e)
e.printStackTrace();
private void DisplayTrack()
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:" + lat + "," + lon + "?q=" + lat + "," + lon + ")")); //NOT WORKING
intent.setData(Uri.parse("geo:" + 15.824730932928347 + "," + 74.50431285009074 + "?q=" + 15.824730932928347 + "," + 74.50431285009074 + ")")); //WORKING
startActivity(intent);
以下是我的数据:
"data": [
"id": "43",
"site_no": "361",
"p_id_no": "68-1-361",
"sas_application_no": "95534",
"latitude": "15.824730932928347",
"longitude": "74.50431285009074",
【问题讨论】:
我尝试了您的代码,即使使用"geo:" + lat + ","....
,它也适用于我。您能否确认您最后没有 json 解析错误。因为其他一切看起来都很好。
@MayurGajra:没有错误,但响应未正确存储“纬度”:“1”,“经度”:“2”。这是回应。并且传递的值是 lat 和 lon 都是 null
好吧。你能发布你正在做的完整解析吗?您的存储情况如何。
@MayurGajra:我已经更新了代码......
使用此逻辑,您将分配jsonArray
中最后一个对象的lat
和lon
。最有可能的是,当您到达最后一个对象时,您的一个对象已经导致了一些 JSONException
或者您的最后一个元素具有空值或 null 值。在任何情况下,它都被分配了null
值。请务必全面检查您的 JSON 响应。
【参考方案1】:
来自 cmets:使用此逻辑,您将分配 jsonArray
中最后一个对象的 lat
& lon
。最有可能的是,当您到达最后一个对象时,您的一个对象已经导致了一些 JSONException
或者您的最后一个元素具有空值或 null 值。在任何情况下,它都被分配了空值。请务必全面检查您的 JSON 响应。
所以我创建了一个小演示,你可以如何做到这一点。阅读内联 cmets 以了解:
public class MainActivity extends AppCompatActivity
//declare the global variable, initially they are null
private Double lat, lon;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// prepare request
StringRequest stringRequest = new StringRequest(Request.Method.POST, "url",
new Response.Listener<String>()
@Override
public void onResponse(String response)
try
//converting the string to json array object
JSONObject object = new JSONObject(response);
//check
if (object.getInt("status") == 200)
JSONArray jsonArray = object.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++)
//keep getting the new objects
JSONObject pobj = jsonArray.getJSONObject(i);
//assign the last object lat/lon
lat = Double.parseDouble(pobj.getString("latitude"));
lon = Double.parseDouble(pobj.getString("longitude"));
//if they are not null then call the activity
if (lat != null && lon != null)
DisplayTrack(lat, lon);
catch (JSONException e)
e.printStackTrace();
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
);
// call your request like you do
//declared the function out of the Network call scope
private void DisplayTrack(Double lat, Double lon)
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:" + lat + "," + lon + "?q=" + lat + "," + lon + ")")); //NOT WORKING
startActivity(intent);
【讨论】:
是的,我明白了..谢谢你以上是关于在android中使用json数组值的android地图标记的主要内容,如果未能解决你的问题,请参考以下文章
包含多个 json 值的响应是不是总是必须包装在 java 中的数组中?
如何在流分析中查询 JSON 以使包含多个数组值的 JSON 脱离