从改造中获取内容

时间:2015-03-09 20:26:06

标签: java android retrofit

我正在使用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

1 个答案:

答案 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);
    }
});