如何解决 JSONArray 问题,无法获取数据,Android Studio
Posted
技术标签:
【中文标题】如何解决 JSONArray 问题,无法获取数据,Android Studio【英文标题】:How to solve JSONArray problem, cant get data, Android Studio 【发布时间】:2019-09-27 19:04:20 【问题描述】:我在 android Studio 中遇到一些 JSON 问题我一直在观看和阅读一些示例,但仍然无法弄清楚如何将这些数据从数据库传递到“电影”类,如 Java 所示代码。
这是错误开始的日志,第一行显示他正在读取服务器并在日志中获取数据。
private void getMoviesFromDB(int id)
AsyncTask<Integer, Void, Void> asyncTask = new AsyncTask<Integer, Void, Void>()
@org.jetbrains.annotations.Nullable
@Override
protected Void doInBackground(Integer... movieIds)
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://192.168.8.101/databaseproject/getMenu.php?category=" + category)
.build();
try
Response response = client.newCall(request).execute();
Log.d(TAG, "response: " + response.body().string());
JSONArray array = new JSONArray(response.body().string());
for (int i = 0; i < array.length(); i++)
JSONObject object = array.getJSONObject(i);
Movie movie = new Movie(object.getInt("food_id"), object.getString("food_title"),
object.getString("food_image"), object.getString("food_description"), object.getString("food_price"));
MainActivity.this.movies.add(movie);
catch (IOException e)
e.printStackTrace();
catch (JSONException e)
e.printStackTrace();
return null;
日志显示第 139 行和第 127 行的 MainActivity 出现错误
139: JSONArray 数组 = 新 JSONArray(response.body().string());
127: AsyncTask asyncTask = new AsyncTask() ...
D/MILJ:回应: ["food_id":"2","food_title":"indeks","food_image":"http://indexhouse.rs/wp-content/uploads/2014/12/sendvic-prsuta.jpg","food_description ":"sendvic","food_price":"200","food_category":"snacks"]
E/AndroidRuntime:致命异常:AsyncTask #1 进程:com.example.myapplicationccccccc,PID:21227 java.lang.RuntimeException:执行 doInBackground() 时出错 在 android.os.AsyncTask$3.done(AsyncTask.java:353) 在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) 在 java.util.concurrent.FutureTask.setException(FutureTask.java:252) 在 java.util.concurrent.FutureTask.run(FutureTask.java:271) 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 在 java.lang.Thread.run(Thread.java:764) 引起:java.lang.IllegalStateException:关闭 在 okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:374) 在 okio.Buffer.writeAll(Buffer.java:993) 在 okio.RealBufferedSource.readByteArray(RealBufferedSource.java:106) 在 okhttp3.ResponseBody.bytes(ResponseBody.java:128) 在 okhttp3.ResponseBody.string(ResponseBody.java:154) 在 com.example.myapplicationccccccc.MainActivity$1.doInBackground(MainActivity.java:139) 在 com.example.myapplicationccccccc.MainActivity$1.doInBackground(MainActivity.java:127) 在 android.os.AsyncTask$2.call(AsyncTask.java:333) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 在 java.lang.Thread.run(Thread.java:764) D/OpenGLRenderer: eglDestroySurface = 0x7250ce87b0
有人可以帮我吗?我不明白如何解决这个 JSON 特殊情况...
提前致谢。
【问题讨论】:
【参考方案1】:您可能希望将响应放入一个字符串而不是 JSONArray,然后使用该字符串创建一个 JSONObject 并从那里开始。
你能粘贴 JSON 吗?
【讨论】:
【参考方案2】:1,正如@miljan 所说,您应该在此处粘贴您的 JSON 数据,让我们知道数据的结构。使用json.cn 等在线 JSON 美化工具来帮助解决问题。
2、了解数据结构后,使用GSON之类的库可以减少解析JSON数据的痛苦。
【讨论】:
以上是关于如何解决 JSONArray 问题,无法获取数据,Android Studio的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.String 无法从 Okhttp 转换为 JSONArray
如何从 JsonArray 中获取 NSDictonarys?