Android 使用Retrofit获取JSON数据
在大家使用网络请求的时候,往往会出现一种情况:需要拿到服务器返回来的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数据的更多相关文章
- Android Volley 库通过网络获取 JSON 数据
本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...
- android客户端从服务器端获取json数据并解析的实现代码
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...
- (转)android客户端从服务器端获取json数据并解析的实现代码
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码 ...
- android客户端从服务器端获取json数据并解析的实现代码(重要)
首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的URL中获取数组 * @param urlPath * @return * @throws Exc ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- HttpURLConnection从网上获取Json数据并解析详解
HttpURLConnection从网上获取Json数据并解析 1.HttpURLConnection请求数据的步骤 (1)构造一个URL接口地址: URL url = new URL("h ...
- Netflix Falcor获取JSON数据
Netflix开源了JavaScript库Falcor,它为从多个来源获取JSON数据提供了模型和异步机制. Netflix利用Falcor库实现通过JSON数据填充他们网页应用的用户界面.所有来自内 ...
- jquery通过ajax方法获取json数据不执行success
1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...
- jquery用ajax方式从后台获取json数据,将内容填充到下拉列表。
从后台获取json数据,将内容填充到下拉列表. url:链接 par:ID sel:下拉列表选择器 //获取下拉列表 function BuildSelectBox(url, par, sel) { ...
随机推荐
- 【BZOJ 1303】 [CQOI2009]中位数图
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意是1..n的排列. 设b的位置为i. 设i右边的数字,比b大的为1,比b小的为-1. (i左边的位置数字也一样设置成1和-1 则 ...
- 【转】 值得推荐的C/C++框架和库 (真的很强大)
[转] 值得推荐的C/C++框架和库 (真的很强大) 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个 ...
- Linux修改Linux默认打开方式
从总体上讲 /etc/gnome/defaults.list 保存了全局的打开方式 /.local/share/applications/mimeapps.list 保存了个人的打开方式当两着不一致是 ...
- 第十六周项目3:max带来的冲突
问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名:project.cpp *作 者:陈文青 *完毕日期:20 ...
- hpuoj--校赛--特殊的比赛日期(素数判断+模拟)
问题 B: 感恩节KK专场--特殊的比赛日期 时间限制: 1 Sec 内存限制: 128 MB 提交: 392 解决: 99 [提交][状态][讨论版] 题目描述 KK今天参加河南理工大学ACM程 ...
- 数据结构之fhq-treap
本文内容部分转自某大佬博客:https://blog.csdn.net/CABI_ZGX/article/details/79963427 例题:https://www.luogu.org/probl ...
- 安卓开发--AsyncTask2
package com.cnn.imageasyncdemo01; import android.app.Activity; import android.content.Intent; import ...
- POJ 1151 线段树+扫描线
题意:求矩形面积的并 思路: 注意是[l,mid][mid,r] 这是真正的线段了 就当扫描线模板使吧~ //By SiriusRen #include <cmath> #include ...
- Lua,github,nginx
个人觉得这几种工具都是大学里,至少是前几年未曾出现于课本中或者图书馆中的.而如今确实某些公司赫然出现在招聘需求中的东西. 什么是Lua,为什么要用Lua——做手机游戏而被推广的.Lua原来早在93年就 ...
- 《剑指offer》树的子结构
一.题目描述 输入两颗二叉树A,B,判断B是不是A的子结构. 二.输入描述 输入两棵树A,B. 三.输出描述 判断B是不是A的子结构,是返回true,否则返回false. 四.牛客网提供的框架 /* ...