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

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

示例:

//删除地址
@FormUrlEncoded
@POST(ServiceAddr.ADDR_DEL_URL)
Observable<ResponseBody> delAddr(@FieldMap HashMap<String,String> map);
//删除地址
@FormUrlEncoded
@POST(ServiceAddr.ADDR_DEL_URL)
Call<ResponseBody> delAddr2(@FieldMap HashMap<String,String> map);
Presenter层:
public void delAddr(String baseUrl,HashMap<String,String> map){
addrManageModel.delAddr(baseUrl, map)
.subscribe(new Subscriber<ResponseBody>() {
@Override
public void onCompleted() {
Logger.t(TAG).d("地址删除成功");
} @Override
public void onError(Throwable e) {
Logger.t(TAG).d("地址删除失败"+e.getMessage());
} @Override
public void onNext(ResponseBody responseBody) {
BufferedSource source = responseBody.source();
try {
source.request(Long.MAX_VALUE); // Buffer the entire body.
} catch (IOException e) {
e.printStackTrace();
}
Buffer buffer = source.buffer(); Charset charset = UTF8;
MediaType contentType = responseBody.contentType();
if(contentType != null){
charset = contentType.charset(UTF8);
//获取Response的body的字符串 并打印
Logger.t(TAG).d(buffer.clone().readString(charset));
addrManageView.delAddrShow(buffer.clone().readString(charset));
}
}
});
}
或者
public void delAddr2(String baseUrl,HashMap<String,String> map){
addrManageModel.delAddr2(baseUrl, map).enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
Logger.t(TAG).d(response.body().toString()+"===="+response.message()+"==="+response.code());
BufferedSource source = response.body().source();
try {
source.request(Long.MAX_VALUE); // Buffer the entire body.
} catch (IOException e) {
e.printStackTrace();
}
Buffer buffer = source.buffer(); Charset charset = UTF8;
MediaType contentType = response.body().contentType();
if(contentType != null){
charset = contentType.charset(UTF8);
//获取Response的body的字符串 并打印
Logger.t(TAG).d(buffer.clone().readString(charset));
addrManageView.delAddrShow(buffer.clone().readString(charset));
}
} @Override
public void onFailure(Call<ResponseBody> call, Throwable t) { }
});
}
在页面上调用:
delAddrShow()更新UI即可。
												

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. thinkphp5 编辑时 唯一验证 解决办法

    若定义了相关的验证规则,如: namespace app\seller\validate; use think\Validate; class Goodsmtag extends Validate { ...

  2. C语言实现的minixml解析库入门教程

    minixml的中文说明手册:MiniXML中文文档.dochttp://wenku.baidu.com/view/25fd7d7f31b765ce050814f7.html xml源代码: < ...

  3. Qt 5.3 下OpenCV 2.4.11 开发(5)最高效的像素引用

    OpenCV 提供一个函数 getTickCount() ,能够用来測量一段代码的执行时间.另一个函数 getTickFrequency() 用来返回每秒内的时钟周期.代码操作例如以下: double ...

  4. XCL-Chart柱形图的期望线/分界线

    周日在柱形图上加了两个小功能,当中之中的一个是加上了期望线/分界线,功能非常小,但我个人非常喜欢这个功能(好像之前也没看到别的图表库原生支持这个. ) 主要是加上这些小小的横线后,能非常明显的区分出数 ...

  5. 联想z470 win7 64位双系统继续恢复镜像法安装黑苹果10.9.3

    之前的方法是安装 10.9 http://blog.csdn.net/kissing_huo/article/details/23559239的 苹果最新的swift的语言 出来  必须最新的xcod ...

  6. [android]DES/3DES/AES加密方式

    DES 支持8位加密解密,3Des支持24位,Aes支持32位.3Des是Des算法做三次.位数的单位是字节byte.不是bits. 3Des是把24位分成3组.第一组八位用来加密,第二组8位用于解密 ...

  7. Angry IP Scanner 获取设备的IP

    给大家介绍一款软件Angry IP scanner,这款软件最大的用处就是能够扫描某一网段的各个主机的ip.通过使用发现,原理就是通过高速的ping每一个ip,假设有主机存在.就获取这个主机的user ...

  8. Frame Stacking ZOJ 1083,poj 1128

    Frame Stacking Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4034   Accepted: 1352 De ...

  9. Android-加载大图,照片墙的实现

    照片墙这种功能现在应该算是挺常见了,在很多应用中你都可以经常看到照片墙的身影.它的设计思路其实也非常简单,用一个GridView控件当作“墙”,然后随着GridView的滚动将一张张照片贴在“墙”上, ...

  10. MySql语句中select可以嵌套么,字段的重命名可以用中文么

    今天文档中看到的查询语句,SELECT后面又跟了一个SELECT嵌套,而且把字段重命名为中文,请问可以这样做么 MySql语句中select可以嵌套么,字段的重命名可以用中文么 >> my ...