如何解决JSONArray问题,无法获取数据,Android Studio

时间:2019-05-09 21:40:33

标签: java android json

我一直在观看和阅读一些示例,但在Android Studio中遇到了JSON问题,但仍然无法弄清楚如何将这些数据从数据库传递到“ Movie”类中,如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;
        }

日志显示错误是在MainActivity的第139行和第127行

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“:”小吃“}]

     

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特殊情况...

谢谢。

2 个答案:

答案 0 :(得分:0)

您可能希望将响应放入String而不是JSONArray,然后使用该String创建一个JSONObject并从那里开始。

您可以粘贴JSON吗?

答案 1 :(得分:0)

1,正如@miljan所说,您应该在此处粘贴JSON数据,以使我们知道数据的结构。使用json.cn之类的在线JSON美化工具来解决它。

2,在了解了数据的结构之后,使用GSON之类的库可以减轻解析JSON数据的麻烦。