我最近开始使用Retrofit。我不太了解它。我用谷歌搜索了这个问题,没有答案解决我的问题。
这是JSON回复
{
"results": [
{
"description_eng": "This is second time testing",
"img_url": "-",
"title_eng": "Second test"
},
{
"description_eng": "Hello 1 2 3, I am testing.",
"img_url": "https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-xpa1/t31.0-8/s720x720/10838273_816509855058935_6428556113200361121_o.jpg",
"title_eng": "Test"
}
]
}
这是Feed Class
public class Feed {
public List<Results> results;
class Results{
String description_eng,img_url,title_eng;
}
}
这是界面
public interface GetApi {
@GET("/api.json")
public void getData(Callback<List<Feed>> response);
}
我得到json_illegal_syntax Exception
。
答案 0 :(得分:3)
这就是我通过创建空构造函数来解决这个问题的方法。
Feed.class
public class Feed{
private List<Result> results;
public Feed(){}
public List<Result> getFeed(){
return this.results;
}
public void setFeed(List<Result> results) {
this.results = results;
}
}
Result.class
public class Result{
private String description_eng;
private String img_url;
private String title_eng;
public Result(){}
//getters and setters
}
GetApi.class
public interface GetApi {
@GET("/api.json")
public void getData(Callback<Feed> response);
}
答案 1 :(得分:1)
Retrofit默认使用Gson将HTTP主体转换为JSON和从JSON转换。如果要指定与Gson默认值不同的行为(例如命名策略,日期格式,自定义类型),请在构建RestAdapter时提供具有所需行为的新Gson实例。
Gson不能自动反序列化纯内部类,因为它们的no-args构造函数还需要对反序列化时不可用的包含Object的引用。您可以通过使内部类静态或为其提供自定义InstanceCreator来解决此问题。这是一个例子:
public class A {
public String a;
class B {
public String b;
public B() {
// No args constructor for B
}
}
}
注意:上面的B类不能(默认情况下)用Gson序列化。
您应该阅读有关GSON library
的更多信息答案 2 :(得分:1)
public class FeedList<T>{
private List<T> feeds;
public Feed() {
}
public List<T> getFeed(){
return this.feeds;
}
public void setFeed(List<T> results) {
this.feeds = feeds;
}
}
如果只有一个对象有类似的东西,那么你可以删除List部分并获取/设置单个对象。
现在您可以调用FeedList<Result>
或任何您想要的对象。
GetApi.class
public interface GetApi {
@GET("/api.json")
public void getData(Callback<FeedList<Result>> response);
}
答案 3 :(得分:0)
@Ye Min Htut我建议您使用ROBOPOJO生成器来创建Model / POJO类。它将为您生成所有模型类,您不需要自己创建,也将为您提供帮助创建模型类的未来。它只需要JSON字符串,然后单击即可完成您的工作