在大家使用网络请求的时候,往往会出现一种情况:需要拿到服务器返回来的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. hadoop-17-hive数据库元数据查看

    hadoop-17-hive数据库元数据查看 存在本地的mysql中: user001用户中 : > mysql -uhive -phive mysql> use hive; mysql& ...

  2. POJ 2828 Buy Tickets(线段树&#183;插队)

    题意  n个人排队  每一个人都有个属性值  依次输入n个pos[i]  val[i]  表示第i个人直接插到当前第pos[i]个人后面  他的属性值为val[i]  要求最后依次输出队中各个人的属性 ...

  3. POJ 3074 Sudoku DLX精确覆盖

    DLX精确覆盖.....模版题 Sudoku Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8336   Accepted: ...

  4. js控制textarea输入字符串的个数,鼠标按下抬起推断输入字符数

    [Html代码] <table> <tr> <td width="150">短信内容:</td> <td> <te ...

  5. pandas groupby 分组操作

    最一般化的groupby 方法是apply. tips=pd.read_csv('tips.csv') tips[:5] 新生成一列 tips['tip_pct']=tips['tip']/tips[ ...

  6. List operations

    The + operator concatenates lists: Similarly, the * operator repeats a list a given number of items: ...

  7. Laravel-自定全局函数

    Laravel-自定全局函数 标签(空格分隔): php 习惯了 使用 ThinkPHP 框架,有一个公共方法类在代码编写上会快捷很多,所以有必要在此进行配置一番. 实现 在 app 创建文件夹 He ...

  8. 基于JS的身份证验证(完整版)

    var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加权因子 var ValideCode = [ 1, 0 ...

  9. Host status showing red icon in chronograph, Chronograf主机列表页显示主机状态为红色标志

    刚开始全部装好的时候主机显示的状态是绿色的,过了些日子我再打开看的时候就变成红色的了,点击主机进去查看的时候没有了图表数据,大概是这样子的, 在influxdb数据库主机上执行命令curl " ...

  10. 洛谷——P1019 单词接龙(NOIP2000 T3)

    https://www.luogu.org/problem/show?pid=1019#sub 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母, ...