java - 如何解决 JSONArray 问题,无法获取数据,Android Studio
问题描述
我在 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:异步任务异步任务=新的异步任务(){...
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:在 android.os.AsyncTask$3.done(AsyncTask.java:353 执行 doInBackground() 时出错) 在 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) at okio.Buffer.writeAll(Buffer.java:993) at okio.RealBufferedSource.readByteArray(RealBufferedSource.java:106) at okhttp3.ResponseBody .bytes(ResponseBody.java:128) at okhttp3.ResponseBody.string(ResponseBody.java:154) at com.example.myapplicationccccccc.MainActivity$1.doInBackground(MainActivity.java:139) at com.example.myapplicationccccccc.MainActivity$1。 doInBackground(MainActivity.java:127) at android.os.AsyncTask$2.call(AsyncTask.java:333) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at 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,正如@miljan所说,你应该在这里粘贴你的JSON数据,让我们知道数据的结构。使用json.cn等在线 JSON 美化工具来帮助解决。
2、了解数据结构后,使用GSON之类的库可以减少解析JSON数据的痛苦。
推荐阅读
- aws-lambda - 当数据来自 IoT Core 规则时,如何在 AWS Lambda 中获取客户端的 IP 地址?
- mstest - MSTest vS StructureMap:某些间接引用的 dll 不会被结构映射扫描,即使它们确实存在于磁盘上
- python - 寻找像素簇和绘制bbox最有效的算法是什么
- javascript - 如何处理调用浏览器还没有的代码的 SJR 响应?
- javascript - 如果数组为空则禁用按钮并在添加项目时启用?
- javascript - jQuery:用于延迟 removeClass() 的脚本延迟太久
- xamarin - Xamarin 表单,PDF 显示在 iOS 模拟器上,但不在真正的 iPad 上
- c++ - 在 Yocto 中使用 Cmake 构建 Qt5
- mysql - 如何在mysql中比较不同的格式字符串作为日期
- primefaces - 触发行选择事件时,PrimeFaces 数据表不保留复选框选择行