如何从android中的URL获取json数组而不是html
Posted
技术标签:
【中文标题】如何从android中的URL获取json数组而不是html【英文标题】:How to get json Array not html from URL in android 【发布时间】:2021-05-01 22:31:40 【问题描述】:我正在尝试使用 volley 从 android 中的 url 获取 json 数组,但它显示以下错误
com.android.volley.ParseError: org.json.JSONException: java.lang.String 类型的值无法转换为 JSONArray
这意味着我正在从 url 接收 html。
如何从 url 接收 json 格式的数据,以便在 android 中使用 jsonObject 或 jsonArray 进行解析
我的安卓代码是
RequestQueue queue = Volley.newRequestQueue(getContext());
JsonArrayRequest request = new JsonArrayRequest(Method.GET, URL,null, new Response.Listener<JSONArray>()
@Override
public void onResponse(JSONArray response )
Toast.makeText(getContext(), response, Toast.LENGTH_SHORT).show();
Log.i("My success",""+response.toString());
try
for (int i = 0; i <= response.length(); i++)
JSONObject silver_rate_values = response.getJSONObject(i);
String Silver_Rate = silver_rate_values.getString("silver_rate");
Log.v("SilverRate", "silverRate value is" + Silver_Rate);
catch (JSONException e)
e.printStackTrace();
Log.e("Silver rate", "Json parsing error: " + e.getMessage());
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Toast.makeText(getContext(), "my error :"+error, Toast.LENGTH_LONG).show();
Log.i("My error",""+error);
)
;
我的php代码是
$sql = "SELECT * FROM `user_info` \n"
. "ORDER BY `customer_info`.`updatedTime` DESC LIMIT 1";
$result = mysqli_query( $con,$sql );
if(! $result )
die('Could not get data: ' . mysql_error());
//print values to screen
$data = array();
while ($row = mysqli_fetch_assoc($result))
$a = $row['a'];
$b = $row['b'];
$c = $row['c'];
$data[] = $row;
header('Content-type: application/json');
$json=json_encode(array("Values" => $data));
echo $json;
?>
</body>
我的 php 输出是
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
"Values":["a":"8888","b":"9999","c"7777"] </body>
</html>
如果我从 php 代码中删除标头,则输出为 "值":["a":"8888","b":"9999","c"7777"]
然后我也从 Android 端收到同样的错误
【问题讨论】:
从响应 JSON 的页面中删除所有 HTML。 您的 php 输出包含 html 标签。它只能包含 JSON 格式的数据。 @Mrudul...我也试过了..但仍然是同样的错误.. 【参考方案1】:只需添加此行即可获得结果
$jsonfinal = json_encode(json_decode($json), JSON_PRETTY_PRINT);
echo $jsonfinal ;
【讨论】:
它最终会给出相同的结果...它有什么用 是的,它会给出相同的结果。我意识到这个问题是在询问如何将关联数组编码为格式精美的 JSON 字符串,所以这不能直接回答这个问题,但如果你有一个已经是 JSON 格式的字符串,你可以很简单地通过解码和重新编码它(需要 PHP >= 5.4): 问题不打算将关联数组编码为格式精美的 JSON 字符串...该部分已完成...问题是当我将此 Json 发送到 Android 时... Android 是接收 html 数据不是 Json 一个.....正如你所看到的错误.. 如果您在代码中使用了漂亮的 json,它不会在 android 中返回 html 标签。如果您仍有问题,请分享您的回复。 在运行上述代码时....错误监听器被调用..没有响应(提到错误)【参考方案2】:现在我正在更改我的代码并使用 StringRequest 而不是 JsonArrayRequest。下面是代码
RequestQueue queue = Volley.newRequestQueue(getContext());
StringRequest request = new StringRequest(Method.GET, URL_Silver, new Response.Listener<String>()
@Override
public void onResponse(String response )
Log.i("My success",""+response);
try
JSONObject obj = new JSONObject(response);
JSONArray array = obj.getJSONArray("silverRateValues");
for (int i = 0; i <= array.length(); i++)
JSONObject silver_rate_values = array.getJSONObject(i);
String Silver_Rate = silver_rate_values.getString("silver_rate");
Log.v("SilverRate", "silverRate value is" + Silver_Rate);
catch (JSONException e)
e.printStackTrace();
Log.e("Silver rate", "Json parsing error: " + e.getMessage());
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Toast.makeText(getContext(), "my error :"+error, Toast.LENGTH_LONG).show();
Log.i("My error",""+error);
)
;
queue.add(request);
但仍然出现相同的错误...但是现在调用响应并且它是...
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
"Values":["a":"8888","b":"9999","c":"7777"] </body>
</html>
错误是
org.json.JSONException:java.lang.String 类型的值无法转换为 JSONObject
【讨论】:
以上是关于如何从android中的URL获取json数组而不是html的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Android 中的 JSON OR URL 获取特定数据? [关闭]
如何从android中的url解析多个JSON对象和数组?我正在使用一个示例,我希望在该示例中使用它,