我正在使用retrofit来处理android中的Web服务。 我的网址回复是这样的:
{"data":
{"cus_detail":
{
"id": "1",
"cus_unique_id": "181612302153223",
"cus_company_id": "1"
}
}
}
主:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://example.com")
.build();
Retro service = restAdapter.create(Retro.class);
service.getFeed(new retrofit.Callback<Object>() {
@Override
public void success(Object obj, Response response) {
Log.v("RETROFIT",obj.toString());
}
@Override
public void failure(RetrofitError retrofitError) {
System.out.println("RETROFIT_ERROR "+retrofitError);
}
});
接口:
public interface Retro {
@GET("/user?format=json&method=view_profile&cus_id=1")
void getFeed(Callback<Object> response);
}
我得到了这个结果:
{data={cus_detail={id=1, cus_unique_id=181612302153223, cus_company_id=1}}}
如何从此数据中检索cus_unique_id
?
答案 0 :(得分:1)
理想情况下,使用Retrofit,您可以创建映射到JSON的Java类,并在Object
中使用这些类而不是Callback<Object>
。我发现this tool对创建类很有帮助。然后,您就可以轻松访问cus_unique_id
。
service.getFeed(new retrofit.Callback<Data>() {
@Override
public void success(Data data, Response response) {
String cus_unique_id = data.cus_detail.cus_unique_id;
Log.v("RETROFIT",data.toString());
}
@Override
public void failure(RetrofitError retrofitError) {
System.out.println("RETROFIT_ERROR "+retrofitError);
}
});
如果不这样做,我相信obj
的类型实际上是Map<String, Object>
。所以你可以试试下面的东西。像@GreyBeardedGeek一样,我不推荐这种方法。
service.getFeed(new retrofit.Callback<Object>() {
@Override
public void success(Object obj, Response response) {
Map<String, Object> data = (Map<String, Object>) ((Map<String, Object>) obj).get("data");
Map<String, Object> cus_detail = (Map<String, Object>) data.get("cus_detail");
String cus_unique_id = (String) cus_detail.get("cus_unique_id");
Log.v("RETROFIT",obj.toString());
}
@Override
public void failure(RetrofitError retrofitError) {
System.out.println("RETROFIT_ERROR "+retrofitError);
}
});