为了账号安全,请及时绑定邮箱和手机立即绑定

Retrofit2.0 Json解析成HashMap

Retrofit2.0 Json解析成HashMap

小怪兽爱吃肉 2019-03-20 18:19:17
1、比如,接口返回数据如下所示:{  "id": 11,  "name": "电量仪E3",  "A相功率因数": "0.0",  "A相总功率": "0.0",  "A相无功功率": "0.0",  "A相视在功率": "0.0",  "B相功率因数": "0.0",  "B相总功率": "0.0",  "B相无功功率": "0.0",  "B相视在功率": "0.0",  "C相功率因数": "0.0",  "C相总功率": "0.0",  "C相无功功率": "0.0",  "C相视在功率": "0.0",  "报错": "0.0",  "A相电流": "0.0",  "B相电流": "0.0",  "C相电流": "0.0",  "A相功率": "0.0",  "B相功率": "0.0",  "C相功率": "0.0",  "A相电压": "0.0",  "B相电压": "0.0",  "C相电压": "0.0",  "系统功率因数": "0.0",  "系统无功功率": "0.0",  "系统有功功率": "0.0",  "系统视在功率": "0.0",  "频率": "0.0",  "系统总功率": "0.0",  "AB线电压": "0.0",  "AC线电压": "0.0",  "BC线电压": "0.0",  "负荷特性": "0.0"}2、按照json解析成Hash,而不是转化为pojo,目的是为了更好地显示数据,如下图:google过,按照别人的文章,我自己试了一下:Call<Response> call = myService.getDeviceData(room_id, device_id);        call.enqueue(new Callback<Response>() {            @Override            public void onResponse(Response<Response> response) {                if (response.body().code() == 200) {                    String jsonString = response.body().toString();                    System.out.println(">>>>>>>>>");                    System.out.println(jsonString);                    System.out.println(">>>>>>>>>");                } else {                }            }            @Override            public void onFailure(Throwable t) {                System.out.println("设备数据获取失败");                // TODO: 16/2/22 错误处理            }        });但是运行时会报错:'retrofit2.Response' is not a valid response body type. Did you mean ResponseBody?总结:我需要展示json数据的key和value,如果有可行的解决方案,不转化成hashmap也行,,希望各位朋友们能指点迷津,谢谢啦
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

Retrofit 自带了转换的功能,可以将服务器返回的数据自动解析为你的Java Bean,所以这个地方你不能使用Response。


你可以直接用 HashMap<String,String> 代替 Response,即:


Call<HashMap<String,String>> call = myService.getDeviceData(room_id, device_id);

call.enqueue(new Callback<HashMap<String,String>>() {

    @Override

    public void onResponse(Call<HashMap<String,String>> call, Response<HashMap<String,String>> response) {

        HashMap<String,String> map = response.body();

        // TODO 显示 response.

    }


    @Override

    public void onFailure(Call<HashMap<String,String>> call, Throwable t) {

        System.out.println("设备数据获取失败");

        // TODO: 16/2/22 错误处理

    }

});

相应的,你的接口也要改返回值的范型,我这边用的是Retrofit 2.0,你的版本如果回调中没有Call<HashMap<String,String>> call 就忽略。


同样的你还可以 把HashMap<String,String>换为JSONObject(实际上里面就是Map)


查看完整回答
反对 回复 2019-04-17
  • 1 回答
  • 0 关注
  • 566 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信