[英]Android Retrofit + rxjava parsing JSON
我是Retrofit和RX Java的新手,我正在嘗試解析以下JSON:
{
"result":
{
"offset": 0,
"limit": 2,
"count": 408,
"sort": "",
"results":[
{
"_id": "1",
"iid": "338",
"sv": "0",
"sd": "20000101000000",
"vtyp": "1",
"sno": "0001",
},
{
"_id": "2",
"iid": "339",
"sv": "0",
"sd": "20000101000000",
"vtyp": "1",
"sno": "0001",
}
]
}
}
我只對“結果”中包含的對象數組感興趣。 根據我的發現,我應該實現一個JsonDeserializer來獲取該數據,並在構建RestAdapter時使用.setConverter。 這是我現在所擁有的:
class MyDeserializer implements JsonDeserializer<Pojo> {
@Override
public Station deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonElement element = json.getAsJsonObject().get("results");
return new Gson().fromJson(element, Pojo.class);
}
我希望翻新的GET調用返回
Observable<List<Pojo>>
代表“結果”中的對象
我的Pojo.class看起來像這樣:
public class Pojo {
public String _id;
public String iid;
public String sv;
public String sd;
public String vtyp;
}
現在寫,當我嘗試調用API時遇到此錯誤,因此我認為Json反序列化中出現了問題:
retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
任何幫助,將不勝感激!
您需要在以下三個pojo類中創建
MyPojo.java
public class MyPojo { private Result result; public Result getResult () { return result; } public void setResult (Result result) { this.result = result; } }
Result.java
public class Result { private String limit; private String sort; private Results[] results; private String count; private String offset; public String getLimit () { return limit; } public void setLimit (String limit) { this.limit = limit; } public String getSort () { return sort; } public void setSort (String sort) { this.sort = sort; } public Results[] getResults () { return results; } public void setResults (Results[] results) { this.results = results; } public String getCount () { return count; } public void setCount (String count) { this.count = count; } public String getOffset () { return offset; } public void setOffset (String offset) { this.offset = offset; }
}
結果.java
public class Results { private String sno; private String _id; private String iid; private String vtyp; private String sd; private String sv; public String getSno () { return sno; } public void setSno (String sno) { this.sno = sno; } public String get_id () { return _id; } public void set_id (String _id) { this._id = _id; } public String getIid () { return iid; } public void setIid (String iid) { this.iid = iid; } public String getVtyp () { return vtyp; } public void setVtyp (String vtyp) { this.vtyp = vtyp; } public String getSd () { return sd; } public void setSd (String sd) { this.sd = sd; } public String getSv () { return sv; } public void setSv (String sv) { this.sv = sv; }
}
在您的活動中編寫以下代碼
private RestAdapter restAdapter;
private ApiListeners apiListener;
restAdapter = new RestAdapter.Builder().setLogLevel(RestAdapter.LogLevel.FULL).setEndpoint("Your Base Url").build();
apiListener = restAdapter.create(ApiListeners.class);
apiListener.getData(new Callback<MyPojo>()
{
@Override
public void success(MyPojo pojo, Response response)
{
}
@Override
public void failure(RetrofitError error)
{
}
});
在下面的偵聽器中創建
public interface ApiListeners
{
@GET("/yourApiTag")
public void getData(retrofit.Callback<MyPojo> responseVo);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.