>  Q&A  >  본문

java - Retrofit2.0 Json解析成HashMap

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也行,,希望各位朋友们能指点迷津,谢谢啦

伊谢尔伦伊谢尔伦2765일 전299

모든 응답(1)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 17:12:01

    Retrofit에는 서버에서 반환한 데이터를 Java Bean으로 자동으로 구문 분석할 수 있는 변환 기능이 제공되므로 여기서는 Response를 사용할 수 없습니다.

    Response 대신 HashMap<String,String>을 직접 사용할 수 있습니다.

    으아아아

    따라서 인터페이스도 반환 값 패러다임을 변경해야 합니다. Retrofit 2.0을 사용하고 있습니다. 버전에 콜백에 Call<HashMap<String,String>> call가 없으면 무시됩니다.

    마찬가지로 HashMap<String,String>JSONObject로 바꿀 수도 있습니다(실제로는 지도입니다)

    회신하다
    0
  • 취소회신하다