在大家使用网络请求的时候,往往会出现一种情况:需要拿到服务器返回来的JSON字符串,而Retrofit会默认将Json解析,而又没有直接暴露出拿到Json字符串的方法;

今天测接口的时候,发现当数据正常时,服务器会返回{"code":200,"datas":"1"},当请求参数有错误时,会返回{"code":400,"datas":{"error":"\u59d3\u540d\u4e0d\u80fd\u4e3a\u7a7a"}},datas里一会儿是字符串,一会儿是对象,这时就不能用JAVABEAN的形式接收返回数据了。

示例:

  1. //删除地址
  2. @FormUrlEncoded
  3. @POST(ServiceAddr.ADDR_DEL_URL)
  4. Observable<ResponseBody> delAddr(@FieldMap HashMap<String,String> map);
  1. //删除地址
  2. @FormUrlEncoded
  3. @POST(ServiceAddr.ADDR_DEL_URL)
  4. Call<ResponseBody> delAddr2(@FieldMap HashMap<String,String> map);
  1. Presenter层:
  1. public void delAddr(String baseUrl,HashMap<String,String> map){
  2. addrManageModel.delAddr(baseUrl, map)
  3. .subscribe(new Subscriber<ResponseBody>() {
  4. @Override
  5. public void onCompleted() {
  6. Logger.t(TAG).d("地址删除成功");
  7. }
  8.  
  9. @Override
  10. public void onError(Throwable e) {
  11. Logger.t(TAG).d("地址删除失败"+e.getMessage());
  12. }
  13.  
  14. @Override
  15. public void onNext(ResponseBody responseBody) {
  16. BufferedSource source = responseBody.source();
  17. try {
  18. source.request(Long.MAX_VALUE); // Buffer the entire body.
  19. } catch (IOException e) {
  20. e.printStackTrace();
  21. }
  22. Buffer buffer = source.buffer();
  23.  
  24. Charset charset = UTF8;
  25. MediaType contentType = responseBody.contentType();
  26. if(contentType != null){
  27. charset = contentType.charset(UTF8);
  28. //获取Response的body的字符串 并打印
  29. Logger.t(TAG).d(buffer.clone().readString(charset));
  30. addrManageView.delAddrShow(buffer.clone().readString(charset));
  31. }
  32. }
  33. });
  34. }
  1. 或者
  1. public void delAddr2(String baseUrl,HashMap<String,String> map){
  2. addrManageModel.delAddr2(baseUrl, map).enqueue(new Callback<ResponseBody>() {
  3. @Override
  4. public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
  5. Logger.t(TAG).d(response.body().toString()+"===="+response.message()+"==="+response.code());
  6. BufferedSource source = response.body().source();
  7. try {
  8. source.request(Long.MAX_VALUE); // Buffer the entire body.
  9. } catch (IOException e) {
  10. e.printStackTrace();
  11. }
  12. Buffer buffer = source.buffer();
  13.  
  14. Charset charset = UTF8;
  15. MediaType contentType = response.body().contentType();
  16. if(contentType != null){
  17. charset = contentType.charset(UTF8);
  18. //获取Response的body的字符串 并打印
  19. Logger.t(TAG).d(buffer.clone().readString(charset));
  20. addrManageView.delAddrShow(buffer.clone().readString(charset));
  21. }
  22. }
  23.  
  24. @Override
  25. public void onFailure(Call<ResponseBody> call, Throwable t) {
  26.  
  27. }
  28. });
  29. }
  1. 在页面上调用:
  1. delAddrShow()更新UI即可。
  1.  

Android 使用Retrofit获取JSON数据的更多相关文章

  1. Android Volley 库通过网络获取 JSON 数据

    本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...

  2. android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下   首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...

  3. (转)android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下       首先客户端从服务器端获取json数据 1.利用HttpUrlConnection   复制代码 ...

  4. android客户端从服务器端获取json数据并解析的实现代码(重要)

    首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的URL中获取数组 * @param urlPath * @return * @throws Exc ...

  5. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  6. HttpURLConnection从网上获取Json数据并解析详解

    HttpURLConnection从网上获取Json数据并解析 1.HttpURLConnection请求数据的步骤 (1)构造一个URL接口地址: URL url = new URL("h ...

  7. Netflix Falcor获取JSON数据

    Netflix开源了JavaScript库Falcor,它为从多个来源获取JSON数据提供了模型和异步机制. Netflix利用Falcor库实现通过JSON数据填充他们网页应用的用户界面.所有来自内 ...

  8. jquery通过ajax方法获取json数据不执行success

    1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...

  9. jquery用ajax方式从后台获取json数据,将内容填充到下拉列表。

    从后台获取json数据,将内容填充到下拉列表. url:链接 par:ID sel:下拉列表选择器 //获取下拉列表 function BuildSelectBox(url, par, sel) { ...

随机推荐

  1. 【BZOJ 1303】 [CQOI2009]中位数图

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意是1..n的排列. 设b的位置为i. 设i右边的数字,比b大的为1,比b小的为-1. (i左边的位置数字也一样设置成1和-1 则 ...

  2. 【转】 值得推荐的C/C++框架和库 (真的很强大)

    [转] 值得推荐的C/C++框架和库 (真的很强大) 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个 ...

  3. Linux修改Linux默认打开方式

    从总体上讲 /etc/gnome/defaults.list 保存了全局的打开方式 /.local/share/applications/mimeapps.list 保存了个人的打开方式当两着不一致是 ...

  4. 第十六周项目3:max带来的冲突

    问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名:project.cpp *作 者:陈文青 *完毕日期:20 ...

  5. hpuoj--校赛--特殊的比赛日期(素数判断+模拟)

    问题 B: 感恩节KK专场--特殊的比赛日期 时间限制: 1 Sec  内存限制: 128 MB 提交: 392  解决: 99 [提交][状态][讨论版] 题目描述 KK今天参加河南理工大学ACM程 ...

  6. 数据结构之fhq-treap

    本文内容部分转自某大佬博客:https://blog.csdn.net/CABI_ZGX/article/details/79963427 例题:https://www.luogu.org/probl ...

  7. 安卓开发--AsyncTask2

    package com.cnn.imageasyncdemo01; import android.app.Activity; import android.content.Intent; import ...

  8. POJ 1151 线段树+扫描线

    题意:求矩形面积的并 思路: 注意是[l,mid][mid,r] 这是真正的线段了 就当扫描线模板使吧~ //By SiriusRen #include <cmath> #include ...

  9. Lua,github,nginx

    个人觉得这几种工具都是大学里,至少是前几年未曾出现于课本中或者图书馆中的.而如今确实某些公司赫然出现在招聘需求中的东西. 什么是Lua,为什么要用Lua——做手机游戏而被推广的.Lua原来早在93年就 ...

  10. 《剑指offer》树的子结构

    一.题目描述 输入两颗二叉树A,B,判断B是不是A的子结构. 二.输入描述 输入两棵树A,B. 三.输出描述 判断B是不是A的子结构,是返回true,否则返回false. 四.牛客网提供的框架 /* ...