Retrofit2:预期为BEGIN_ARRAY,但在第1行第2列路径为$

时间:2017-07-30 07:20:36

标签: android json retrofit2

我有以下JSON结构:

[
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
  }
]

我正在尝试使用Retrofit 2.x使用此JSON。我正在尝试获取用户列表。

这是我的APIService interface

public interface APIService {

    @POST("posts")
    Call<List<FakeJSON>> getItems();
}

这是我的POJO课程:

public class FakeJSON {

    @SerializedName("userId")
    @Expose
    private int userId;
    @SerializedName("id")
    @Expose
    private int id;
    @SerializedName("title")
    @Expose
    private String title;
    @SerializedName("body")
    @Expose
    private String body;

    /**
     * No args constructor for use in serialization
     *
     */
    public FakeJSON() {
    }

    /**
     *
     * @param id
     * @param body
     * @param title
     * @param userId
     */
    public FakeJSON(int userId, int id, String title, String body) {
        super();
        this.userId = userId;
        this.id = id;
        this.title = title;
        this.body = body;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

}

最后,这是我的Activity代码,我正在进行网络呼叫:

public class NetworkActivity extends AppCompatActivity {

    private static Retrofit.Builder builder = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_network);
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        builder = new Retrofit.Builder()
                .baseUrl("https://jsonplaceholder.typicode.com/")
                .addConverterFactory(GsonConverterFactory.create());

        Retrofit retrofit =
                builder
                        .client(
                                httpClient.build()
                        )
                        .build();
        APIService apiService = retrofit.create(APIService.class);

        Call<List<FakeJSON>> listCall = apiService.getItems();

        listCall.enqueue(new Callback<List<FakeJSON>>() {
            @Override
            public void onResponse(Call<List<FakeJSON>> call, Response<List<FakeJSON>> response) {
                try {
                    Log.e("List Size", response.body().size()+"");
                }catch (NullPointerException e){
                    e.printStackTrace();;
                }
            }

            @Override
            public void onFailure(Call<List<FakeJSON>> call, Throwable t) {
                Log.e("Error", t.getMessage());
            }
        });
    }
}

每当我运行应用程序时,我都会遇到以下异常:

  

E /错误:预期BEGIN_ARRAY但在第1行第2列路径为BEGIN_OBJECT $

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

  

&#39; E /错误:预计BEGIN_ARRAY但是BEGIN_OBJECT

这意味着改造面向JSON Object而不是数组。 也许你从服务器上得到了一些错误? 尝试手动执行相同的查询并查看响应。 也许通过这种方式,您可以确定代码中的请求是否有问题。