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 ...
随机推荐
- 靠谱的CSS样式
0. 引言 记录一些用到的CSS样式,只要可以使用CSS3的地方都可以使用. 1. CSS样式 flex布局:引用 阮一峰的网络日志http://www.ruanyifeng.com/blog/201 ...
- Android监视器概述
还望支持个人博客站:http://www.enjoytoday.cn Android监视器可帮助您分析应用程序的性能,以便您优化,调试和改进它们. 它可以让您从硬件设备或Android模拟器监控应用程 ...
- MQTT linux centOS7 部署
系统版本centos7 X64 1.设置保存安装包路径 # cd /usr/local/src 2.开始下载源包 官网资源: https://mosquitto.org/files/source/ # ...
- 【HDU1814】Peaceful Commission(2-sat+暴力染色)
传送门 \(2-sat\)的模板题,首先得出题目中的二元关系为:对于有矛盾的\(x_i,x_j\),至多选择一个,那么连边\(x_i\rightarrow x_j',x_j\rightarrow x_ ...
- 无法添加符号: 归档没有索引;运行 ranlib 以添加一个
这将告诉您对象文件的格式.如果对象文件是针对不同的平台编译的,则会导致无法为存档创建索引.要纠正这种情况,您需要重新编译这些文件.
- Jmeter+Jenkins的HTML报告中添加QPS、90%栏目显示
1.进入jmeter/extras目录,修改 jmeter-results-detail-report_21.xsl 2.打开文件 在summary部分修改如下: 在pagelist部分修改如下: ...
- ioctl操作
在本书中有两个地方都对这个函数进行了介绍,其实还有很多地方需要这个函数.ioclt函数传统上一直作为纳西而不适合归入其他精细定义类别的特性的系统接口.网络程序(特别是服务器程序)经常在程序启动执行后使 ...
- 今天好像找到C语言延迟输出的原因了
有时候运行c 第一行printf就像卡住一样.原来是这样<>>>>>>> int a; printf_s("input one number: ...
- MySQL实战45讲学习笔记:第三十一讲
一.本节概览 今天我要和你讨论的是一个沉重的话题:误删数据. 在前面几篇文章中,我们介绍了 MySQL 的高可用架构.当然,传统的高可用架构是不能预防误删数据的,因为主库的一个 drop table ...
- 01 学习数据分析的python库
网页爬取 1.requests 2.BeautifulSoup 3.Scrapy 科学计算与数据分析 1.scipy 2.numpy 3.pandas 机器学习和深度学习 1.Scikit-learn ...