在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 中最后一个对象的latlon。最有可能的是,当您到达最后一个对象时,您的一个对象已经导致了一些 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 脱离

Android:使用数组项填充列表视图

在数组Vue Js中的另一个不同json对象中具有相同值的数组中的所有json对象中添加/合并新项目

没有值的 AFNetworking JSON 数组

如何从 Angular2(Typescript)中的 Json 数组中获取值的总和