查询链接进行改造

时间:2016-01-31 06:32:44

标签: java android rest get retrofit

第一篇文章,如果我的术语不清楚,那就很抱歉。

所以我正在使用改造从链接中获取对象数组: BASE_URL / todos?userId = 1 。 使用时:

@GET("todos?userId={userId}")
Call<List<ToDoObject>> listTodos(@Query("userId") int userId);

对于这次改装电话:

 retrofit.Retrofit retrofit = new retrofit.Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        BaseServiceAPI service = retrofit.create(BaseServiceAPI.class);
        Call<List<ToDoObject>> listToDos = service.listTodos(getUserId());

        listToDos.enqueue(new Callback<List<ToDoObject>>() {
            @Override
            public void onResponse(Response<List<ToDoObject>> response, retrofit.Retrofit retrofit) {
                if (response.body() != null) {
                    for (int i = 0; i < response.body().size(); i++) {
                        toDoObjectList.add(response.body().get(i));
                    }
                    toDoRecycAdapter.notifyDataSetChanged();
                }else Log.d("flow", "no go");
            }

            @Override
            public void onFailure(Throwable t) {
                Log.d("flow", "todo failure: " + t.getMessage());
            }
        });

获取此数组:

[
  {
    "completed": false,
    "dueDate": "2016-07-31 06:38:00",
    "id": 1,
    "title": "Find your son Duke",
    "userId": 1
  },
  {
    "completed": false,
    "dueDate": "2017-05-24 07:30:00",
    "id": 4,
    "title": "Rule the City ",
    "userId": 1
  },
  {
    "completed": true,
    "dueDate": "2016-1-30  1:15:00",
    "id": 6,
    "title": "Run The ",
    "userId": 1
  },
  {
    "completed": true,
    "dueDate": "2016-1-30  1:28:00",
    "id": 7,
    "title": "Hmmm",
    "userId": 1
  }
]

我收到此错误:“FATAL EXCEPTION:由以下引起:java.lang.IllegalArgumentException:URL查询字符串”userId = {userId}“必须没有替换块。对于动态查询参数,请使用@Query。”

我认为这是使用Query的正确案例。我甚至尝试过Path但仍然没有。我不知道还有很多其他程序员要问,我已经在这几周了。有人能告诉我我做错了吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

您应该在请求中保留@Query参数并将其从@GET中删除。另外,您说您只需要请求特定对象,那么为什么您的回复包含列表Call<List<ToDoObject>>

@GET("todos")
Call<ToDoObject> specificTodo(@Query("userId") int userId);