Retrofit+Okhttp+RxJava打造网络请求之Post
之前一直在准备Android培训的事情,所幸的是终于完事啦,在这过程中真的发现了自身无论从沟通能力还是技术能力上很多的不足,就用一句 路漫漫其修远兮,吾将上下而求索 来勉励自己吧。之前也在项目上用上Okhttp,这几天抽空学习了下Retrofit和Rxjava,就记录记录所学的知识点吧。
在使用Retrofit+Okhttp+RxJava之前,我们需要做一些准备工作,在gradle文件中导入相应的支持(所用的Retrofit,Okhttp,RxJava都是目前最新版本的)这里附上一些学习资料入门。
Retrofit官网:https://square.github.io/retrofit/
OkHttp官网:http://square.github.io/okhttp/
RxAndroid github:https://github.com/ReactiveX/RxAndroid/
Rx入门(真的写的特别好):http://gank.io/post/560e15be2dca930e00da1083 给Android开发者的RxJava详解
JakeWharton大神的RxBinding:https://github.com/JakeWharton/RxBinding
导入Retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
导入OkHttp
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okio:okio:1.9.0'
导入RxJava
compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
我们可以在全局变量中初始化一个OKHttpClient 和 Retrofit,并且配置一些比如连接时间的配置,我们就可以不用每向服务器请求一次数据就初始化OKHttpClient和Retrofit啦。
package com.keranbin.retrofitdemo; import android.app.Activity;
import android.app.Application;
import android.content.Context; import com.keranbin.retrofitdemo.Bean.User;
import com.keranbin.retrofitdemo.httpHelp.Http; import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit; import okhttp3.Cache;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory; /**
* Created by keranbin on 2016/8/9.
*/
public class App extends Application {
private static OkHttpClient okHttpClient;
private static Retrofit retrofit; public static App app; @Override
public void onCreate() {
super.onCreate();
app = this;
//初始化OkHttp
OkHttpInstance();
//初始化Retrofit
RetrofitInstance();
} /**
* 初始化okHttp
* @return
*/
public static OkHttpClient OkHttpInstance() {
if (okHttpClient == null) {
okHttpClient = new OkHttpClient().newBuilder()
//设置连接时间
.connectTimeout(500, TimeUnit.MILLISECONDS)
//设置读时间
.readTimeout(1000, TimeUnit.MILLISECONDS)
//设置写时间
.writeTimeout(1000, TimeUnit.MILLISECONDS)
//设置缓存
.cache(new Cache(app.getExternalCacheDir(), 10 * 1024 * 1024))
.build();
return okHttpClient;
} else {
return okHttpClient;
}
} /**
* 初始化retrofit
*/
public static Retrofit RetrofitInstance(){
if(retrofit==null){
retrofit=new Retrofit.Builder()
.baseUrl(Http.URL)
//添加Gson支持
.addConverterFactory(GsonConverterFactory.create())
//添加Retrofit对Rxjava的支持
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//配置OkHttp
.client(okHttpClient).build();
return retrofit;
}else{
return retrofit;
}
}
}
然后我们先添加一个方法
package com.keranbin.retrofitdemo.RetroFit; import java.util.HashMap; import retrofit2.http.POST;
import retrofit2.http.QueryMap;
import rx.Observable; /**
* Created by keranbin on 2016/10/28.
*/ public interface IPost {
@POST("ajax.mobileSword")
Observable<String> login(@QueryMap HashMap<String,String> paramsMap);
}
再看看Activity中怎么调用和接收结果的
package com.keranbin.retrofitdemo.Activity; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast; import com.jakewharton.rxbinding.view.RxView;
import com.keranbin.retrofitdemo.App;
import com.keranbin.retrofitdemo.R;
import com.keranbin.retrofitdemo.RetroFit.IPost; import java.util.HashMap; import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers; public class MainActivity extends AppCompatActivity {
private String TAG = MainActivity.this.getPackageName(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} /**
* 初始化页面组件及数据
*/
private void initView() {
RxView.clicks(findViewById(R.id.btnLogin)).subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
login();
}
});
} /**
* 登录请求
*/
public void login() {
//把参数封装到map中
HashMap map = new HashMap<String, String>();
map.put("tid", "login");
map.put("userName", "xiaoming");
map.put("passWd", "qwer1234"); //使用类Retrofit生成接口IPost的实现
IPost loginService = App.RetrofitInstance().create(IPost.class); loginService.login(map)
//设置call()执行的线程为新起一个线程
.subscribeOn(Schedulers.newThread())
//设置onNext()执行的线程在主线程中
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber() {
@Override
public void onCompleted() { } @Override
public void onError(Throwable e) {
Log.i(TAG, e.getMessage());
} @Override
public void onNext(Object o) {
Toast.makeText(MainActivity.this, o.toString(), Toast.LENGTH_SHORT).show();
}
});
}
}
Retrofit+Okhttp+RxJava打造网络请求之Post的更多相关文章
- 学习RxJava+Retrofit+OkHttp+MVP的网络请求使用
公司的大佬用的是这一套,那我这个菜鸟肯定要学习使用了. 我在网上找了很多文章,写的都很详细,比如 https://www.jianshu.com/u/5fd2523645da https://www. ...
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...
- Android okHttp网络请求之Retrofit+Okhttp+RxJava组合
前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)
首先,展示一下封装好之后的项目的层级结构. 1.先创建一个RetrofitApiService.java package com.xdw.retrofitrxmvpdemo.http; import ...
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(二),个人认为这次封装比较强大了
在前面已经初步封装了一个MVP的网络请求框架,那只是个雏形,还有很多功能不完善,现在进一步进行封装.添加了网络请求时的等待框,retrofit中添加了日志打印拦截器,添加了token拦截器,并且对Da ...
- android开发学习 ------- Retrofit+Rxjava+MVP网络请求的实例
http://www.jianshu.com/p/7b839b7c5884 推荐 ,照着这个敲完 , 测试成功 , 推荐大家都去看一下 . 下面贴一下我照着这个敲完的代码: Book实体类 - 用 ...
- retrofit okhttp RxJava bk Gson Lambda 综合示例【配置】
项目地址:https://github.com/baiqiantao/retrofit2_okhttp3_RxJava_butterknife.git <uses-permission andr ...
- Android 的OkHttp(发送网络请求)
今天讲的是和HttpURLConnection差不多的OkHttp; 先把网站献上: 官网介绍okhttp的: https://square.github.io/okhttp/ 下载postman的: ...
- 浅谈我为什么选择用Retrofit作为我的网络请求框架
比较AsyncTask.Volley.Retrofit三者的请求时间 使用 单次请求 7个请求 25个请求 AsyncTask 941ms 4539ms 13957ms Volley 560ms 22 ...
随机推荐
- UML类图和用例图
软件体系结构的多视图 kruchten提出了软件体系结构的4+1视图模型,其中用例图位于中心位置(4+1视图中的1). 逻辑视图 一种静态建模视图 进程视图 一种并发进程或任务视图 开发视 ...
- 渗透测试学习 十五、 文件上传&&解析漏洞
大纲:文件解析漏洞 上传本地验证绕过 上传服务器验证绕过 文件解析漏洞 解析漏洞主要说的是一些特殊文件被IIS.Apache.Nginx在某些情况下解释成脚本文件格式的漏洞. IIS 5.x/6.0解 ...
- K8S 1.14.6中,将kubeadm集群证书颁发时间延长到100年
更改两个文件,重新编译kubeadm. 1,D:\kubernetes-1.14.6\staging\src\k8s.io\client-go\util\cert\cert.go // NewSelf ...
- day58_9_24多对多建表手动,form组件(判断类型),cookies和session
一.多对多建表关系之手动添加. 1.全自动 像之前讲过的一样,我们可以通过manytomanyField的字段来建立多对多关系: class Book(models.Model): title = m ...
- DIV 自定义滚动条样式(二)
流浏览器自带的滚动条样式很丑,确实有必要美化. 滚动条从外观来看是由两部分组成:1,可以滑动的部分,我们叫它滑块2,滚动条的轨道,即滑块的轨道,一般来说滑块的颜色比轨道的颜色深. 滚动条的css样式主 ...
- 剑指Offer-14.链表中倒数第k个结点(C++/Java)
题目: 输入一个链表,输出该链表中倒数第k个结点. 分析: 第一个解法,我们可以先遍历一遍链表,计算下节点的总数n,然后再从头结点查n-k个节点,即是倒数第k个节点. 第二个解法,便是使用双指针,两个 ...
- display Flex 盒子模型布局兼容Android UC
<!DOCTYPE html><html><head><meta charset="utf-8"><meta content= ...
- Go 中 ORM 的 Repository(仓储)模式
ORM 在业务开发中一直扮演着亦正亦邪的角色.很多人赞颂 ORM,认为 ORM 与面向对象的契合度让代码简洁有道.但是不少人厌恶它,因为 ORM 隐藏了太多的细节,埋下了超多的隐患.在 Go 中,我们 ...
- Javal连载4-注释&class与public class区别
一.Java注释 1.作用:不会编译倒.class文件之中:增强可读性 2.分类: (1)单行注释(只注释当前行):// (2)多行注释: /* 注释 注释 注释 */ (3)javadoc注释 /* ...
- iOS:获取一周7天的日期(年-月-日-星期)
一.介绍 在开发中,日期的使用绝对是离不了的,跟业务的关联性太强了,例如课程表.有的时候我们不需要课程表,但是需要获取一周7天的日期,这一周内的日期,我觉得有两种理解: 1.获取当天开始的一周日期,当 ...