预期 BEGIN_OBJECT 但 BEGIN_ARRAY :Retrofit2 Android
Expected BEGIN_OBJECT but was BEGIN_ARRAY : Retrofit2 Android
我是 JSON 解析的新手,正在尝试解析以下内容 JSON:
[
{
"id" : 1,
"title" : {
"rendered": "a link"
},
"categories": [ 4,9,11 ],
"links":{
"featuredmedia":[
{
"href": link
}
]
}
},
...
]
我的界面是:
public interface MediaAPI {
@GET("Media")
Call<LinkList> getDetails();
}
我的模型类是:
public class LinkList {
private List<Links> links;
// getter and setter
}
...
public class Links {
private List<Featuredmedia> Featured = new ArrayList<Featuredmedia>();
// getter and setter
}
...
public class Featuredmedia {
private String href;
// getter and setter
}
客户端代码为:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ROOT_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
MediaAPI service = retrofit.create(MediaAPI.class);
Call<LinkList> call = service.getDetails();
call.enqueue(new Callback<LinkList>() {
@Override
public void onResponse(Call<LinkList> call, Response<LinkList> response) {
if(response.isSuccessful()){
successToast();
}
else {
failToast();
}
}
@Override
public void onFailure(Call<LinkList> call, Throwable t) {
Log.d("Failed", t.getMessage());
showToast();
}
});
我只需要在 "featuredmedia" 中获取 link,所以我只将它们包含在模型中。我也对 的错误有了一些了解,但错误仍然存在。
任何解决此问题的建议都会有很大帮助。
像这样更改 Links
模型。
public class Links {
private List<Featuredmedia> featuredmedia = new ArrayList<Featuredmedia>();
// getter and setter
}
还有LinkList
应该是这样的。
public class LinkList {
private Links links;
// getter and setter
}
Gson 将负责将 json 反序列化到您的 LinksList 并期望一个对象使其工作。
你的模型基本上期望像这样的东西:
{
links: [...]
}
由于您的 Response Json 是一个数组,您需要一个模型来表示它:任何 Array 或 List 都可以。
所以不要使用 LinkList,只需使用例如Call<List<Links>>
我是 JSON 解析的新手,正在尝试解析以下内容 JSON:
[
{
"id" : 1,
"title" : {
"rendered": "a link"
},
"categories": [ 4,9,11 ],
"links":{
"featuredmedia":[
{
"href": link
}
]
}
},
...
]
我的界面是:
public interface MediaAPI {
@GET("Media")
Call<LinkList> getDetails();
}
我的模型类是:
public class LinkList {
private List<Links> links;
// getter and setter
}
...
public class Links {
private List<Featuredmedia> Featured = new ArrayList<Featuredmedia>();
// getter and setter
}
...
public class Featuredmedia {
private String href;
// getter and setter
}
客户端代码为:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ROOT_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
MediaAPI service = retrofit.create(MediaAPI.class);
Call<LinkList> call = service.getDetails();
call.enqueue(new Callback<LinkList>() {
@Override
public void onResponse(Call<LinkList> call, Response<LinkList> response) {
if(response.isSuccessful()){
successToast();
}
else {
failToast();
}
}
@Override
public void onFailure(Call<LinkList> call, Throwable t) {
Log.d("Failed", t.getMessage());
showToast();
}
});
我只需要在 "featuredmedia" 中获取 link,所以我只将它们包含在模型中。我也对
任何解决此问题的建议都会有很大帮助。
像这样更改 Links
模型。
public class Links {
private List<Featuredmedia> featuredmedia = new ArrayList<Featuredmedia>();
// getter and setter
}
还有LinkList
应该是这样的。
public class LinkList {
private Links links;
// getter and setter
}
Gson 将负责将 json 反序列化到您的 LinksList 并期望一个对象使其工作。
你的模型基本上期望像这样的东西:
{
links: [...]
}
由于您的 Response Json 是一个数组,您需要一个模型来表示它:任何 Array 或 List 都可以。
所以不要使用 LinkList,只需使用例如Call<List<Links>>