改装Gson:预计BEGIN_ARRAY但是BEGIN_OBJECT(不重复)

时间:2016-05-07 21:46:31

标签: android gson retrofit retrofit2

请问我尝试了两种方法来解决这个问题,但两种方法都不起作用,我不知道发生了什么,但在它运行之前没有问题。 我有以下json:

{
  "_embedded" : {
    "posts" : [ {
      "postid" : 1,
      "taggedusers" : null,
      "hashtags" : null,
      "createdAt" : "2016-05-07",
      "commentsCount" : 0,
      "likesCount" : 0,
      "shareCount" : 0,
      "description" : "nothing",
      "post" : "nothing",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/posts/1"
        },
        "postsEntity" : {
          "href" : "http://localhost:8080/posts/1"
        },
        "usersByUserid" : {
          "href" : "http://localhost:8080/posts/1/usersByUserid"
        },
        "commentsesByPostid" : {
          "href" : "http://localhost:8080/posts/1/commentsesByPostid"
        }
      }
    }, {
      "postid" : 2,
      "taggedusers" : null,
      "hashtags" : null,
      "createdAt" : "2016-05-07",
      "commentsCount" : 0,
      "likesCount" : 0,
      "shareCount" : 0,
      "description" : "nothing",
      "post" : "nothing",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/posts/2"
        },
        "postsEntity" : {
          "href" : "http://localhost:8080/posts/2"
        },
        "usersByUserid" : {
          "href" : "http://localhost:8080/posts/2/usersByUserid"
        },
        "commentsesByPostid" : {
          "href" : "http://localhost:8080/posts/2/commentsesByPostid"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/6/postsesByUserid"
    }
  }
}

我尝试在改造时使用以下内容阅读:

 Retrofit retrofit = RetrofitGenerator.initRetrofit(CacheUtils.readSharedPreference(getActivity()).getToken());
        PostService postService= retrofit.create(PostService.class);
         postService.getUsersPost((int) CacheUtils.readSharedPreference(getActivity()).getUserID()).enqueue(new Callback<List<Post>>() {
             @Override
             public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                 if(response.isSuccessful()){
                     List<Post> postEntitiyList = response.body();

                 }
             }

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

和接口:

public interface PostService {
    @Headers("Content-Type:application/json")
    @GET("/posts")
    Call<List<Post>> getAllPosts();

    @Headers("Content-Type:application/json")
    @GET("users/{id}/postsesByUserid")
    Call<List<Post>> getUsersPost(@Path("id") int id);
}

但是我遇到了这个问题:预计BEGIN_ARRAY但在第1行第2列路径为BEGIN_OBJECT路径$ 我尝试在另一个类中创建Post Pojo,如下所示:

public class PostEntitiy {
    private Post post;

    public PostEntitiy(Post post) {
        this.post = post;
    }

    public Post getPost() {
        return post;
    }

    public void setPost(Post post) {
        this.post = post;
    }
}

然后我使用List仍然遇到同样的问题,我使用了什么错误?

1 个答案:

答案 0 :(得分:2)

  

预计BEGIN_ARRAY但是BEGIN_OBJECT

您的JSON不是列表,它是一个对象:{ ... } =&gt; object,[ ... ] =&gt;列表。

修改

为了帮助您入门:

class Embedded {
    ...
}

class Links {
    ...
}

class Top {
    Embedded _embedded;
    Links _links;
}

依此类推。

然后,您的所有List<Post>都应替换为Top

更改我的课程的命名以适合您的风格。