Ast*_*hme 6 java android json gson retrofit
这是我的Json
[
{
"nata_center":{
"id":67,
"nata_center_name":"Primo Institute of Design"
}
},
{
"nata_center":{
"id":68,
"nata_center_name":"Sai Ganesh Institute"
}
}
]
Run Code Online (Sandbox Code Playgroud)
Pojo课程
public class Explorer {
NataCenter nataCenter;
public NataCenter getNataCenter() {
return nataCenter;
}
public void setNataCenter(NataCenter nataCenter) {
this.nataCenter = nataCenter;
}
}
Run Code Online (Sandbox Code Playgroud)
2)
public class NataCenter {
public String id;
public String nata_center_name;
public NataCenter(String id,String nata_center_name)
{
this.id=id;
this.nata_center_name=nata_center_name;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public String getNata_center_name() {
return nata_center_name;
}
public void setNata_center_name(String nata_center_name) {
this.nata_center_name = nata_center_name;
}
}
Run Code Online (Sandbox Code Playgroud)
GetMethhodinRetrofit
void getCenter(@Query("id") int id,Callback<List<Explorer>> callback);
Run Code Online (Sandbox Code Playgroud)
MainActvitiy.java
service.getCenter(i,new Callback<List<Explorer>>() {
@Override
public void success(List<Explorer> o, Response response) {
Log.d(TAG,"Success" + "Response"+o.toString());
@Override
public void failure(RetrofitError error) {
Log.d(TAG,"Failed"+error.toString());
}
});
Run Code Online (Sandbox Code Playgroud)
这是错误消息
Failedretrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
Run Code Online (Sandbox Code Playgroud)
基本上问题是你在json中以root身份使用数组.您必须创建将用作此列表的容器的对象和此对象的反序列化器.我使用Explorer作为容器,它看起来如下:
public class Explorer {
List<NataCenter> nataCenter;
public List<NataCenter> getNataCenter() {
return nataCenter;
}
public void add(NataCenter nataCenterItem){
if(nataCenter == null){
nataCenter = new LinkedList<>();
}
nataCenter.add(nataCenterItem);
}
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案只是解释.你可以提高你的Explorer课程.列表的塞特不是最好的主意.
NataCenter类看起来像以前一样,
重要的思想之一就是ExplorerDeserializerJson上课.它用于反序列化json,它看起来如下所示:
public class ExplorerDeserializerJson implements JsonDeserializer<Explorer> {
@Override
public Explorer deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
throws JsonParseException {
Explorer explorer = new Explorer();
JsonArray jsonArray = je.getAsJsonArray();
Gson gson = new Gson();
for(JsonElement element : jsonArray){
JsonObject jsonObject = element.getAsJsonObject();
NataCenter nataCenter = gson.fromJson(jsonObject.get("nata_center"), NataCenter.class);
explorer.add(nataCenter);
}
return explorer;
}
}
Run Code Online (Sandbox Code Playgroud)
另外我改变了你的客户.现在Explorer是回应.
void getCenter(@Query("id") int id,Callback<Explorer> callback);
Run Code Online (Sandbox Code Playgroud)
最后,您需要在创建RestAdapter的位置注册新的反序列化器,如下所示:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BuildConfig.IP)
.setConverter(new GsonConverter(new GsonBuilder()
.registerTypeAdapter(Explorer.class, new ExplorerDeserializerJson())
.create()))
.build();
restAdapter.create(CenterClient.class).getCenter(1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5646 次 |
| 最近记录: |