java - 由 : java. lang.IllegalStateException 引起:应为 BEGIN_ARRAY 但在第 1 行第 2 列为 BEGIN_OBJECT

标签 java android exception android-asynctask gson

<分区>

我正在尝试以以下形式解析 gson 响应:

{"movie_list":[
           {"movie_id":"1","movie_name":"Avatar 2009"},                
           {"movie_id":"2","movie_name":"Titanic"}
           ]}

使用 GSON 库,像这样:

        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();
        movieList = new ArrayList<MovieList>();
        movieList = Arrays.asList(gson.fromJson(reader, MovieList[].class));

我制作了一个 MovieList 类:

公共(public)类 MovieList {

@SerializedName("movie_id")
public String movieId;

@SerializedName("movie_name")
public String movieName;

public String getMovieId() {
    return movieId;
}

public void setMovieId(String movieId) {
    this.movieId = movieId;
}

public String getMovieName() {
    return movieName;
}

public void setMovieName(String movieName) {
    this.movieName = movieName;
}

但是得到这个异常:

    01-19 15:48:09.425: E/AndroidRuntime(4868): FATAL EXCEPTION: AsyncTask #1
01-19 15:48:09.425: E/AndroidRuntime(4868): Process: com.example.autocompletetextviewdemo, PID: 4868
01-19 15:48:09.425: E/AndroidRuntime(4868): java.lang.RuntimeException: An error occured while executing doInBackground()
01-19 15:48:09.425: E/AndroidRuntime(4868):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at java.lang.Thread.run(Thread.java:841)
01-19 15:48:09.425: E/AndroidRuntime(4868): Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
01-19 15:48:09.425: E/AndroidRuntime(4868):     at com.google.gson.Gson.fromJson(Gson.java:815)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at com.google.gson.Gson.fromJson(Gson.java:741)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at com.example.autocompletetextviewdemo.MainActivity$AutoCompleteText.doInBackground(MainActivity.java:152)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at com.example.autocompletetextviewdemo.MainActivity$AutoCompleteText.doInBackground(MainActivity.java:1)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-19 15:48:09.425: E/AndroidRuntime(4868):     ... 4 more
01-19 15:48:09.425: E/AndroidRuntime(4868): Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
01-19 15:48:09.425: E/AndroidRuntime(4868):     at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70)
01-19 15:48:09.425: E/AndroidRuntime(4868):     at com.google.gson.Gson.fromJson(Gson.java:803)

最佳答案

JSON 的根对象是对象,而不是数组。

这里需要两个类,一个代表外部对象,一个代表电影本身:

  1. 将您的 MovieList 类重命名为 Movie
  2. 创建一个新的 Movie 类,如下所示:

电影列表:

public class MovieList {
    @SerializedName("movie_list")
    public List<Movie> Movies;
}

关于java - 由 : java. lang.IllegalStateException 引起:应为 BEGIN_ARRAY 但在第 1 行第 2 列为 BEGIN_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28033303/

相关文章:

android - 存储要在 Android 中共享的临时文件的正确方法

android - 如何停止应用程序执行,直到 AsyncTask 填充 SharedPreferences

java - 异常类定义

java - Mockito (Junit) 无法迭代 JSONArray 对象

java - 为什么 java.util.Optional 没有 Some 和 None 子类?

安卓 "Only the original thread that created a view hierarchy can touch its views."

java - 为什么我的快速排序这么慢?

c# - 记录已处理的异常

java - 读取位于 jar 中的文件作为 java.io.File 对象

Java调整堆大小问题