我有这个问题,似乎无法找到解决方案。我用谷歌搜索但无济于事。
API返回一个对象数组,但gson找到了一个对象。
我的模特
public class Message {
private int id;
private String title;
private String details; }
MessageClient
public interface MessageClient {
@GET("/api/test")
Call<List<Message>> getMessages();}
实施
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(Api.BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
MessageClient client = retrofit.create(MessageClient.class);
Call<List<Message>> call = client.getMessages();
call.enqueue(new Callback<List<Message>>() {
@Override
public void onResponse(Call<List<Message>> call, Response<List<Message>> response) {
List<Message> messageList = response.body();
Log.d(TAG, "LIST: "+messageList);
}
@Override
public void onFailure(Call<List<Message>> call, Throwable t) {
Log.d(TAG, "API ERROR: "+t.getMessage());
}
});
API的示例数据
[
{
"id": 1,
"title": "Title 1",
"details": "Message1.",
"client_id": 1,
},
{
"id": 2,
"title": "Title 2",
"details": "Message 2.",
"client_id": 1,
}]
我错过了哪里?请注意API样本数据。
答案 0 :(得分:0)
是的,API没有返回一条消息,它返回一组消息。因此,您需要将其映射为列表,而不是单个消息。
所以我建议:
1.您创建一个额外的模型,bean或pojo。
您可以将其称为MessageList
,它看起来像:
public class MessagesList {
private List<Message> messageList;
//add getters and setters .. etc.
}
List<Message>
更改为MessageList
。这应该允许API返回的消息列表映射到MessageList
模型,每条消息都将映射到Message
对象(唯一?) id,标题和细节。现在,您可以遍历列表以获取每个Message
。