【问题标题】:Using Volley to Parse an array from PHP into Android使用 Volley 将数组从 PHP 解析到 Android
【发布时间】:2016-05-08 11:16:25
【问题描述】:

我找不到任何有关从 PHP 将数组解析到我的 android 应用程序的资源。我正在使用 Volley 来处理连接。

目前,我在 Web 服务器上的 PHP 脚本中有一个数组,其中包含与数据库的连接,该数据库将来自 MySQL 查询的数据放入数组中。

$latitude = array (
    //Code for array here
);

$longitude = array (
    //Code for array here
);

我可以正常连接到脚本,但无法弄清楚如何将 PHP 中的数组中的每个元素获取到我的 ma​​inActivity.java 文件中的数组中。

Java 代码抛出异常,提示“纬度没有价值” 我理解这一点的方式是因为“纬度”也试过“$纬度”不是数组的名称,而是变量名。在PHP中我不认为有这样的名字。

是否有另一种方法可以将此数组的内容解析为 Java。 我试过的Java代码是:

String url = "urlHere";
    JSONObject jObj = new JSONObject();
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, jObj,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try
                    {
                        JSONArray jsonArray = response.getJSONArray("$latitude");
                        //Loop through array
                        for (int i = 0; i<jsonArray.length(); i++)
                        {
                            JSONObject locationItem = jsonArray.getJSONObject(i);
                            String latitude = locationItem.getString("index1");
                        }
                    }
                    catch (Exception e)
                    {
                        //Error encountered.
                        //Log Error
                        Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            //Toast.makeText(getApplicationContext(), volleyError.toString(), Toast.LENGTH_LONG).show();
        }
    });

【问题讨论】:

  • 是json对象里面的数组吗?因为如果不是,您需要使用 JsonArrayRequest 而不是 JsonObjectRequest。您能否发布您从服务器收到的 json 响应?
  • 它正在拾取内容,无论如何它说: **com.android.volley.parseError: org.json.JSONEXCEPTION:Value("latitude":{"index1":100", " org.json.JSONOBJECT 类型的 index2","200"}) 无法转换为 JSONArray
  • 哦,难怪,让我写一个答案
  • 请从 "$latitude" 中删除 $,因为 JSON 键是 "latitude" 而不是 "$latitude" :)

标签: java android arrays android-volley


【解决方案1】:

所以你得到错误的原因是因为

"latitude":
{
     "index1": "100", 
     "index2": "200",
}

应该是(为了让您的代码正常工作):

"latitude": [
         { "index1": "100" },
         { "index2": "200" },
]
  1. 在原始 JSON 中,您刚刚获得了一个 JSON 对象,其键名为 index1index2
  2. 在第二个 JSON 中,您有一个 JSON 对象数组,其中 index1 作为第一个元素中的键,index2 在第二个元素中。

更新:
即使上面的代码会让你的代码工作。我建议您将 JSON 更改为:

"latitude": [
    "100",
    "200",
]

并为您的onResponse(...) 方法写:

@Override
public void onResponse(JSONObject response) {
    try
    {
        JSONArray jsonArray = response.getJSONArray("latitude");
        //Loop through array
        for (int i = 0; i<jsonArray.length(); i++)
        {
            String latitude = jsonArray.getString(i);
        }
    }
    // Rest of your code can stay the same
}

对我来说似乎更直观。

【讨论】:

  • 嘿,伙计,您的答案已赞成,但我不得不使用 ArrayRequest 重新编写 Java。我确实使用了上面的一些 PHP 技巧。谢谢!
  • 别担心,很高兴它帮助了你:)
猜你喜欢
  • 1970-01-01
  • 2016-09-06
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多