【问题标题】:IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAYIllegalStateException:应为 BEGIN_OBJECT 但为 BEGIN_ARRAY
【发布时间】:2017-08-04 22:26:35
【问题描述】:

我正在努力学习 MVP。我在教程和 YouTube 视频的帮助下编写了一个代码。首先,我使用了 Json2Class 插件。在那之后,我创建了一个 Json-Server 只是为了让一个来自 rest api 的 json 文件进行测试。

{
"posts": [{
        "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"
    },
    {
        "userId": 1,
        "id": 3,
        "title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
        "body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut"
    },
    {
        "userId": 1,
        "id": 4,
        "title": "eum et est occaecati",
        "body": "ullam et saepe reiciendis voluptatem adipisci\nsit amet autem assumenda provident rerum culpa\nquis hic commodi nesciunt rem tenetur doloremque ipsam iure\nquis sunt voluptatem rerum illo velit"
    }]}

这里是 json 文件的一瞥。我通过插件转换为 Java 类。然后在Presenter中我有这个方法

    public void getPosts() {
    getView().onShowDialog("Loading posts.....");
    Observable<PostsResponse> postsResponseObservable = mApiService.getPosts();
    subscribe(postsResponseObservable, this);
}

应用程序模块:

    @Singleton
@Provides
Retrofit provideRetrofit(@Named("ok-1") OkHttpClient client, GsonConverterFactory converterFactory,
                         RxJava2CallAdapterFactory adapterFactory){
    return new Retrofit.Builder()
            .baseUrl(mBaseUrl)
            .addConverterFactory(converterFactory)
            .addCallAdapterFactory(adapterFactory)
            .client(client)
            .build();
}

一切都提供了,但这里是 GsonConverterFactory:

    @Singleton 
@Provides 
GsonConverterFactory provideGsonConverterFactory(){
    return GsonConverterFactory.create();
}

最后是映射器:

    public List<Post> mapPosts(PostsResponse response){
    List<Post> postList = new ArrayList<>();
    if (response != null) {
        PostsResponsePosts[] responsePosts = response.getPosts();
        if (responsePosts != null) {
            for (PostsResponsePosts post : responsePosts) {
                Post mPost = new Post();
                mPost.setUserId(post.getUserId());
                mPost.setId(post.getId());
                mPost.setTitle(post.getTitle());
                mPost.setBody(post.getBody());
                postList.add(mPost);
            }
        }
    }
    return postList;
}

但我得到IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $。有什么解决办法吗?非常感谢。

【问题讨论】:

  • 分享您的Post 课程。另请查看answer to this question,这将帮助您了解您的模型类有什么问题。
  • 你能分享你的 PostsResponsePosts 模型吗
  • 也可能是您的服务器返回的内容与您共享的 JSON 不同,请务必检查一下
  • 我已经分享了以下课程。我解决了。这是我的 json 文件。我将分享我的解决方案。

标签: java android json


【解决方案1】:

我认为问题出在 mApiService.getPosts();方法。 请添加来自 mApiService 的代码。可能你有这样的事情:

Call<YourClass> getPosts();

改成

Call<List<YourClass>> getPosts();

对不起我的英语......

【讨论】:

  • 我没有使用 Call 函数,我使用的是 Observable。这里看看:@GET("/posts") Observable&lt;PostsResponse&gt; getPosts();我尝试将其更改为Observable&lt;List&lt;PostsResponse&gt;&gt; getPosts()但它不起作用。
【解决方案2】:

因为我使用的是 Json 服务器,所以我不得不更改 Json 文件

{
    "posts": [{
            "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"
        }
}

{
    "posts": {
        "posts": [{
                "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"
            }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2013-08-10
    • 2017-10-16
    • 1970-01-01
    • 2013-05-15
    • 2021-05-27
    相关资源
    最近更新 更多