Retrofit的简单使用

Retrofit是REST安卓客户端请求库。使用Retrofit可以进行GET,POST,PUT,DELETE等请求方式。

官方文档:http://square.github.io/retrofit/

1.在AndroidManifest.xml中请求了网络权限:
<uses-permission android:name="android.permission.INTERNET"/>

2.添加Gradle依赖项:

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta3'
compile 'io.reactivex:rxandroid:1.0.1'

Retrofit 支持许多种解析方式来解析响应数据:
Gson com.squareup.retrofit:converter-gson:2.0.0-beta2
Jackson com.squareup.retrofit:converter-jackson:2.0.0-beta1
Moshi com.squareup.retrofit:converter-moshi:2.0.0-beta1
Protobuf com.squareup.retrofit:converter-protobuf:2.0.0-beta1
Wire com.squareup.retrofit:converter-wire:2.0.0-beta1
Simple XML com.squareup.retrofit:converter-simplexml:2.0.0-beta1

3.创建API接口:

public interface GitHub {@GET("/repos/{owner}/{repo}/contributors")Call<List<Contributor>> contributors(@Path("owner") String owner,@Path("repo") String repo);}

4.创建retrofit实例,并添加gson转换器:

public static final String API_URL = "https://api.github.com";
// Create a very simple REST adapter which points the GitHub API.
Retrofit retrofit = new Retrofit.Builder().baseUrl(API_URL).addConverterFactory(GsonConverterFactory.create()).build();

5.创建一个Java类Contributor,用来保存接收到的数据:

public static class Contributor {public final String login;public final int contributions;public Contributor(String login, int contributions) {this.login = login;this.contributions = contributions;}
}

6.调用API接口:

// Create an instance of our GitHub API interface.
GitHub github = retrofit.create(GitHub.class);// Create a call instance for looking up Retrofit contributors.
//完整的请求地址:https://api.github.com/repos/square/retrofit/contributors 
Call<List<Contributor>> call = github.contributors("square", "retrofit");// Fetch and print a list of the contributors to the library.
List<Contributor> contributors = call.execute().body();
for (Contributor contributor : contributors) {System.out.println(contributor.login + " (" + contributor.contributions + ")");
}

7.取消请求
我们可以终止一个请求。终止操作是对底层的httpclient执行cancel操作。即使是正在执行的请求,也能够立即终止。
call.cancel();

Retrofit与RxJava结合

1.使用Observable创建一个API接口:

public interface GitHub2 {@GET("/repos/{owner}/{repo}/contributors")Observable<List<Contributor>> contributors(@Path("owner") String owner,@Path("repo") String repo);}

2.创建retrofit对象实例时,通过addCallAdapterFactory来添加对RxJava的支持:

Retrofit retrofit = new Retrofit.Builder().baseUrl(API_URL).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();

3.调用API接口:

// Create an instance of our GitHub API interface.
GitHub2 github = retrofit.create(GitHub2.class);
Observable<List<Contributor>> observable = github.contributors("square", "retrofit");observable.subscribe(new Subscriber<List<Contributor>>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(List<Contributor> contributors) {for (Contributor contributor : contributors) {System.out.println("observable " + contributor.login + " (" + contributor.contributions + ")");}}
});

Retrofit使用OkHttp

OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {@Overridepublic okhttp3.Response intercept(Chain chain) throws IOException {okhttp3.Response response = chain.proceed(chain.request());response.header(IF_MODIFIED_SINCE, "");return response;}}).build();
Retrofit retrofit = new Retrofit.Builder().baseUrl(HOST).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create()).client(okHttpClient).build();


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vba excel 退出编辑状态_VBA小常识(15)—Application对象

VBA小常识&#xff08;15&#xff09;—Application对象学习自杨洋老师《全民一起学VBA》Application是位于最顶端的对象&#xff0c;代表excel程序本身&#xff0c;所有对象都属于它。1. application.cells当前处于激活状态的工作表&#xff0c;即“活动工作表”的单元格。此时…

手机--装饰者模式

/* * 装饰者* 装饰者与被装饰对象有相同的父类* 装饰者内包含被装饰者对象的引用* * 组合替代继承来扩展对象行为&#xff0c;运行时根据需求动态扩展* 扩展开放&#xff0c;修改关闭。* */public class Phone { }public class IPhone : Phone{public IPhone() { Console.Write…

一个网站 Code/Android/

http://www.java2s.com/Code/Android/

c++ stack 遍历_划重点啦!带你解读图的两种遍历方式

01知识框架02图的遍历1深度优先遍历基本思想&#xff1a;首先访问图中起始顶点v&#xff0c;然后由v出发&#xff0c;访问与v邻接且未被访问的顶点再访问与v相邻且未被访问的顶点 w1...重复上述过程。当不能再继续向下访问时&#xff0c;依次退回到最近被的问的顶点&#xff0c…

for循环延时_单片机的独立按键学习,实现60秒循环数字的启动暂停与清零

想要学习单片机必须要准备单片机开发板一块&#xff0c;和单片机C语言版本的书籍&#xff0c;我会把每天录制视频的源代码到头条&#xff0c;并且录制相同文章名字视频到西瓜视频&#xff0c;如果你再学习独立按键这一块有不明白的地方可以点开我的头像&#xff0c;进入我的主页…

本来中午打算应付下随便吃点,可是连盐都没有放的辣椒炒蛋实在是令人不快...

可是现在由于这个问题已经产生&#xff0c;我就将计就计&#xff0c;把他的空调电池给弄了&#xff0c;额后下午起来已经是7点半&#xff0c;就出去买了一袋4元的盐&#xff0c;本来还是打算会醒来早点&#xff0c;可是自己到了夜间才睡醒&#xff0c;还是将就再吃个没有放辣椒…

调用startactivityforresult后,onactivityresult立刻返回RESULT_CANCELED

调用startActivityForResult后&#xff0c;onActivityResult立刻响应&#xff0c;原因如下&#xff1a;1. 去掉跳转到的页面的android:launchMode"singleTask"属性&#xff08;SINGLE_TASK标识以及SINGLE_INSTANCE两个标识必须在r.result0的条件中&#xff0c;即这两…

mysql创建全外连接的视图_关系型数据库 MySQL 表索引和视图详解

原创&#xff1a; JiekeXu JiekeXu之路 一、索引数据库索引通俗的讲就是和书本的目录一样&#xff0c;主要就是为了提高查询数据的效率。由于数据存储在数据库表中&#xff0c;所以索引是创建在数据库表对象上&#xff0c;由表中的一个字段或多个字段生成的键组成&#xff0c;这…

FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径)

http://acm.hdu.edu.cn/showproblem.php?pid1160 题意&#xff1a;现给出老鼠的体重与速度&#xff0c;要求你找出符合要求的最长子序列。 要求是 W[m[1]] < W[m[2]] < ... < W[m[n]]&#xff08;体重&#xff09; && S[m[1]] > S[m[2]] > ... > S[…

设计一个名为complex的类来表示复数_complex类java解决

作者&#xff1a;wzu_cza123出自&#xff1a;CSDN原文&#xff1a;blog.csdn.net/wzu_cza123/article/details/108857953?utm_mediumdistribute.pc_category.none-task-blog-hot-5.nonecase&depth_1-utm_sourcedistribute.pc_category.none-task-blog-hot-5.nonecase&…

java将经纬度转换为平面坐标

&#xff08;米勒投影&#xff09;算法public static double[] MillierConvertion(double lat, double lon) { double L 6381372 * Math.PI * 2;//地球周长 double WL;// 平面展开后&#xff0c;x轴等于周长 double HL/2;// y轴约等于周长一半 double mill2.3;// 米勒投影…

小程序onload_微信小程序开发入门之共享账本(十四)

微信小程序开发入门之共享账本(十四)(备注&#xff1a;微信小程序的wxml文件相当于HTML文件&#xff0c;wxss文件相当于CSS文件&#xff0c;js文件就是JavaScript文件&#xff0c;数据库为NoSQL数据库&#xff0c;数据库脚本语言也同NoSQL&#xff0c;因为是运行在微信内&#…

POJ 3342 树形DP+Hash

这是很久很久以前做的一道题&#xff0c;可惜当时WA了一页以后放弃了。 今天我又重新捡了起来。&#xff08;哈哈1A了&#xff09; 题意&#xff1a; 没有上司的舞会判重 思路&#xff1a; hash一下树形DP 题目中给的人名hash到数字&#xff0c;再进行运算。 树形DP f[x…

Ubuntu 安装 Vue.js

1 配置Node (1) 从https://nodejs.org/en/download/ 下载node.js&#xff0c;例如 node-v6.11.1-linux-x64.tar.xz (2) 解压到一个地方&#xff0c;然后配置全局变量&#xff0c;在/etc/profile 添加下面配置信息&#xff1a; export NODE_HOME/home/junliang/Soft/node-v6.11.…

MyISAM表加字段的特殊方法

最近一个统计系统的大表需要加字段&#xff0c;表的引擎是myisam&#xff0c;表大小在3亿&#xff0c;物理文件在106G。想想都蛋疼。那么这种情况下怎么把字段撸上去呢? 1. 首先想到了《高性能MySQL》提到的直接更改表结构文件&#xff08;frm&#xff09;&#xff0c;但是在经…

python正则表达式面试题_吐血总结!50道Python面试题集锦(4)

Q31、如何在python中注释多行&#xff1f; 注释多行代码时。所有要注释的行都要在开头前加#。还可以使用快捷方式来注释多行&#xff0c;就是按住Ctrl键并在每个想要包含&#xff03;字符的地方左键单击并键入一次&#xff03;。 Q32、什么是Python中的文档Docstrings&#xff…

iOS本地推送UILocalNotification

本地通知主要是基于app本身定时器的行为。即使app在后台&#xff0c;也会发送本地通知。一个app只能有有限数量的预定通知&#xff0c;最多允许最近的64条通知&#xff0c;其余通知将会被系统忽略。 推送通知的呈现效果: 在屏幕顶部显示的一条横幅在屏幕中间弹出一个UIAlertVie…

RxJava之PublishSubject、BehaviorSubject、ReplaySubject和AsyncSubject

public class T2 {/*** subject 是一个神奇的对象&#xff0c;它可以是一个Observable同时也可以是一个Observer&#xff1a;它作为连接这两个世界的一座桥梁。* 一个主题可以订阅一个Observable&#xff0c;就像一个观察者&#xff0c;并且它可以发射新的数据&#xff0c;或者…

3d人脸识别算法opencv_热招职位算法类

1.资深算法工程师leader-AI平台地点&#xff1a;深圳工作职责1、推进机器学习及计算机视觉领域的核心算法&#xff1b;2、构建机器学习及计算机视觉领域的关键应用&#xff1b;3、将算法于实际应用场景相结合&#xff0c;构建算法和应用的正反馈机制。任职资格1、较强的学术背景…

Android Gradle编译问题

1. Could not find lint-gradle-api.jar (com.android.tools.lint:lint-gradle-api:26.1.2). Searched in the following locations:https://jcenter.bintray.com/com/android/tools/lint/lint-gradle-api/26.1.2/lint-gradle-api-26.1.2.jar 解决方法&#xff1a; 根build.gr…