第一篇文章,如果我的术语不清楚,那就很抱歉。
所以我正在使用改造从链接中获取对象数组: 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但仍然没有。我不知道还有很多其他程序员要问,我已经在这几周了。有人能告诉我我做错了吗?
提前致谢
答案 0 :(得分:1)
您应该在请求中保留@Query参数并将其从@GET中删除。另外,您说您只需要请求特定对象,那么为什么您的回复包含列表Call<List<ToDoObject>>
?
@GET("todos")
Call<ToDoObject> specificTodo(@Query("userId") int userId);