类型java.lang.String的值不能转换为JSONArray(Value of type java.lang.String cannot be converted to JSONArray)

编程入门 行业动态 更新时间:2024-10-11 03:17:47
类型java.lang.String的值不能转换为JSONArray(Value of type java.lang.String cannot be converted to JSONArray)

我正在尝试使用json将简单的应用程序从MySQL数据载入到android。 这是我的PHP代码:

$response = array(); $result = mysql_query("SELECT * FROM Demo LIMIT 2"); if(mysql_num_rows($result) !=0) { while($row = mysql_fetch_array($result)){ array_push($response, new Image( $row["id"], $row["name"], $row["image"] )); } echo json_encode($response); } class Image { var $id; var $name; var $link1; function Image($id, $name, $link1) { $this->id = $id; $this->name = $name; $this->link1 = $link1; } }

结果json:

[{ “ID”: “1”, “名称”: “thisisname”, “LINK1”: “thisislink”},{ “ID”: “2”, “名称”: “thisisname”, “LINK1”:“thisislink “}]

这是android代码:

class getDetailProduct extends AsyncTask<String, Integer, String> { @Override protected String doInBackground(String... strings) { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("http://10.0.3.2/demo/display.php"); String kq = ""; try { HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); kq = EntityUtils.toString(entity); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return kq; } @Override protected void onPostExecute(String s) { Log.e("result", s); try { JSONArray jsarr = new JSONArray(s); // Error this line if(jsarr.length()>0){ for (int i = 0; i<jsarr.length(); i++){ JSONObject jo = jsarr.getJSONObject(i); imageArrayList.add(new MyImage( jo.getInt("id"), jo.getString("name"), jo.getString("link1") )); } MyGridViewAdapter myGridViewAdapter = new MyGridViewAdapter(getApplicationContext(), R.layout.item_gridview, imageArrayList); gridView.setAdapter(myGridViewAdapter); } } catch (JSONException e) { e.printStackTrace(); } } }

这是Logcat:

20:22:57.055 12905-12905/com.example.chientran.demoproject E/result: [{"id":"1","name":"thisisname","link1":"thisislink"},{"id":"2","name":"thisisname","link1":"thisislink"}] W/System.err: org.json.JSONException: Value of type java.lang.String cannot be converted to JSONArray W/System.err: at org.json.JSON.typeMismatch(JSON.java:111) W/System.err: at org.json.JSONArray.<init>(JSONArray.java:96) W/System.err: at org.json.JSONArray.<init>(JSONArray.java:108) W/System.err: at com.example.chientran.demoproject.MainActivity$getDetailProduct.onPostExecute(MainActivity.java:93) W/System.err: at com.example.chientran.demoproject.MainActivity$getDetailProduct.onPostExecute(MainActivity.java:57) W/System.err: at android.os.AsyncTask.finish(AsyncTask.java:632) W/System.err: at android.os.AsyncTask.access$600(AsyncTask.java:177) W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) W/System.err: at android.os.Looper.loop(Looper.java:135) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5221) W/System.err: at java.lang.reflect.Method.invoke(Native Method) W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

但是,如果我使用hardjson,它就可以工作

String ss= "[{\"id\":\"1\",\"name\":\"thisisname\",\"link1\":\"thisislink\"},{\"id\":\"2\",\"name\":\"thisisname\",\"link1\":\"thisislink\"}]"; JSONArray jsonarr = new JSONArray(ss);// It work

`

Am trying make simple app load data from mysql to android using json. This is my php code:

$response = array(); $result = mysql_query("SELECT * FROM Demo LIMIT 2"); if(mysql_num_rows($result) !=0) { while($row = mysql_fetch_array($result)){ array_push($response, new Image( $row["id"], $row["name"], $row["image"] )); } echo json_encode($response); } class Image { var $id; var $name; var $link1; function Image($id, $name, $link1) { $this->id = $id; $this->name = $name; $this->link1 = $link1; } }

result json:

[{"id":"1","name":"thisisname","link1":"thisislink"},{"id":"2","name":"thisisname","link1":"thisislink"}]

This is android code:

class getDetailProduct extends AsyncTask<String, Integer, String> { @Override protected String doInBackground(String... strings) { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("http://10.0.3.2/demo/display.php"); String kq = ""; try { HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); kq = EntityUtils.toString(entity); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return kq; } @Override protected void onPostExecute(String s) { Log.e("result", s); try { JSONArray jsarr = new JSONArray(s); // Error this line if(jsarr.length()>0){ for (int i = 0; i<jsarr.length(); i++){ JSONObject jo = jsarr.getJSONObject(i); imageArrayList.add(new MyImage( jo.getInt("id"), jo.getString("name"), jo.getString("link1") )); } MyGridViewAdapter myGridViewAdapter = new MyGridViewAdapter(getApplicationContext(), R.layout.item_gridview, imageArrayList); gridView.setAdapter(myGridViewAdapter); } } catch (JSONException e) { e.printStackTrace(); } } }

This is Logcat:

20:22:57.055 12905-12905/com.example.chientran.demoproject E/result: [{"id":"1","name":"thisisname","link1":"thisislink"},{"id":"2","name":"thisisname","link1":"thisislink"}] W/System.err: org.json.JSONException: Value of type java.lang.String cannot be converted to JSONArray W/System.err: at org.json.JSON.typeMismatch(JSON.java:111) W/System.err: at org.json.JSONArray.<init>(JSONArray.java:96) W/System.err: at org.json.JSONArray.<init>(JSONArray.java:108) W/System.err: at com.example.chientran.demoproject.MainActivity$getDetailProduct.onPostExecute(MainActivity.java:93) W/System.err: at com.example.chientran.demoproject.MainActivity$getDetailProduct.onPostExecute(MainActivity.java:57) W/System.err: at android.os.AsyncTask.finish(AsyncTask.java:632) W/System.err: at android.os.AsyncTask.access$600(AsyncTask.java:177) W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) W/System.err: at android.os.Looper.loop(Looper.java:135) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5221) W/System.err: at java.lang.reflect.Method.invoke(Native Method) W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

But if I use hardjson, it work

String ss= "[{\"id\":\"1\",\"name\":\"thisisname\",\"link1\":\"thisislink\"},{\"id\":\"2\",\"name\":\"thisisname\",\"link1\":\"thisislink\"}]"; JSONArray jsonarr = new JSONArray(ss);// It work

`

最满意答案

JSONArray arrayresult = ss.getJSONArray(response); for (int i = 0; i < arrayresult.length(); i++) { JSONObject a = arrayresult.getJSONObject(i); YourModel model = new YourModel(); model.id = a.getInt("id"), model.name = a.getString("name"), model.link1 = a.getString("link1") modellist.add(model); }

Thank all for your support. I have resolve my problem. my android code is correct, but in file php I was used Encode in UTF-8-BOM. So i changed it to Encode in UTF-8. It work

更多推荐

本文发布于:2023-08-07 18:07:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1465333.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:转换为   类型   lang   String   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!