将GreenDao与Retrofit集成

时间:2014-08-25 09:15:13

标签: java android retrofit greendao

我正在寻找一种解决方案,让我可以一起改进工作和GreenDao。

这是我的代码,不起作用。

Post是由greenDao生成器生成的类

编辑:此代码的运行返回我" retrofit.RetrofitError:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但是第1行第2行路径$ BEGIN_OBJECT "

public static void test() {
    RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(BASE_URL)
            .build();

    PostsInterface postsInterface = restAdapter.create(PostsInterface.class);

    Callback<List<Post>> callback = new Callback<List<Post>>() {
        @Override
        public void success(List<Post> posts, Response response) {
            Log.d(TAG, response.toString());
        }

        @Override
        public void failure(RetrofitError error) {
            Log.d(TAG, error.toString());
        }
    };

    postsInterface.getPosts(0, 10, callback);
}

public interface PostsInterface {
    @GET("/posts")
    void getPosts(@Query("start") int limit, @Query("count") int offset, Callback<List<Post>> callback);
}

2 个答案:

答案 0 :(得分:0)

看起来请求返回的是Json对象而不是Json数组。确保服务器实际返回Post列表,并且当来自服务器的Post包含使用相同名称的普通对象时,Post对象不希望将命名字段作为数组。

答案 1 :(得分:0)

问题所在:回调&gt;回调

请在您的daogenerator上再创建一个名为DataPost的DAO,然后再在回调中创建,将其更改为Callback回调。

然后在DataPost模型中添加ToMany。

@ToMany
@JoinEntity(entity = Post.class, sourceProperty = "id", targetProperty = "id")
public List<Post> yourPropertyNamefromJSON; //--> to make the name it has to be the same as the JSON response for example : 

JSON RESPONSE

{
  "success": true,
  "data": [
    {
      "name": "blah",
      "description": "blah"
    }]
 }


 public List<Post> data; //--> name have to be data

如果你的大脑问这个问题:为什么它还需要1个班级??? 解答:因为你的JSON以“{”(Curly Bracket)开头,它不是一个数组,而是以OBJECT开头。

这应该可以解决你的问题!!

好运!