之前一直在准备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

  1. compile 'com.squareup.retrofit2:retrofit:2.1.0'
  2. compile 'com.squareup.retrofit2:converter-gson:2.1.0'
  3. compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

导入OkHttp

  1. compile 'com.squareup.okhttp3:okhttp:3.4.1'
  2. compile 'com.squareup.okio:okio:1.9.0'

导入RxJava

  1. compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
  2. compile 'io.reactivex:rxandroid:1.2.1'
  3. compile 'io.reactivex:rxjava:1.1.6'

我们可以在全局变量中初始化一个OKHttpClient 和 Retrofit,并且配置一些比如连接时间的配置,我们就可以不用每向服务器请求一次数据就初始化OKHttpClient和Retrofit啦。

  1. package com.keranbin.retrofitdemo;
  2.  
  3. import android.app.Activity;
  4. import android.app.Application;
  5. import android.content.Context;
  6.  
  7. import com.keranbin.retrofitdemo.Bean.User;
  8. import com.keranbin.retrofitdemo.httpHelp.Http;
  9.  
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.concurrent.TimeUnit;
  13.  
  14. import okhttp3.Cache;
  15. import okhttp3.OkHttpClient;
  16. import retrofit2.Retrofit;
  17. import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
  18. import retrofit2.converter.gson.GsonConverterFactory;
  19.  
  20. /**
  21. * Created by keranbin on 2016/8/9.
  22. */
  23. public class App extends Application {
  24. private static OkHttpClient okHttpClient;
  25. private static Retrofit retrofit;
  26.  
  27. public static App app;
  28.  
  29. @Override
  30. public void onCreate() {
  31. super.onCreate();
  32. app = this;
  33. //初始化OkHttp
  34. OkHttpInstance();
  35. //初始化Retrofit
  36. RetrofitInstance();
  37. }
  38.  
  39. /**
  40. * 初始化okHttp
  41. * @return
  42. */
  43. public static OkHttpClient OkHttpInstance() {
  44. if (okHttpClient == null) {
  45. okHttpClient = new OkHttpClient().newBuilder()
  46. //设置连接时间
  47. .connectTimeout(500, TimeUnit.MILLISECONDS)
  48. //设置读时间
  49. .readTimeout(1000, TimeUnit.MILLISECONDS)
  50. //设置写时间
  51. .writeTimeout(1000, TimeUnit.MILLISECONDS)
  52. //设置缓存
  53. .cache(new Cache(app.getExternalCacheDir(), 10 * 1024 * 1024))
  54. .build();
  55. return okHttpClient;
  56. } else {
  57. return okHttpClient;
  58. }
  59. }
  60.  
  61. /**
  62. * 初始化retrofit
  63. */
  64. public static Retrofit RetrofitInstance(){
  65. if(retrofit==null){
  66. retrofit=new Retrofit.Builder()
  67. .baseUrl(Http.URL)
  68. //添加Gson支持
  69. .addConverterFactory(GsonConverterFactory.create())
  70. //添加Retrofit对Rxjava的支持
  71. .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
  72. //配置OkHttp
  73. .client(okHttpClient).build();
  74. return retrofit;
  75. }else{
  76. return retrofit;
  77. }
  78. }
  79. }

然后我们先添加一个方法

  1. package com.keranbin.retrofitdemo.RetroFit;
  2.  
  3. import java.util.HashMap;
  4.  
  5. import retrofit2.http.POST;
  6. import retrofit2.http.QueryMap;
  7. import rx.Observable;
  8.  
  9. /**
  10. * Created by keranbin on 2016/10/28.
  11. */
  12.  
  13. public interface IPost {
  14. @POST("ajax.mobileSword")
  15. Observable<String> login(@QueryMap HashMap<String,String> paramsMap);
  16. }

再看看Activity中怎么调用和接收结果的

  1. package com.keranbin.retrofitdemo.Activity;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.util.Log;
  6. import android.widget.Toast;
  7.  
  8. import com.jakewharton.rxbinding.view.RxView;
  9. import com.keranbin.retrofitdemo.App;
  10. import com.keranbin.retrofitdemo.R;
  11. import com.keranbin.retrofitdemo.RetroFit.IPost;
  12.  
  13. import java.util.HashMap;
  14.  
  15. import rx.Subscriber;
  16. import rx.android.schedulers.AndroidSchedulers;
  17. import rx.functions.Action1;
  18. import rx.schedulers.Schedulers;
  19.  
  20. public class MainActivity extends AppCompatActivity {
  21. private String TAG = MainActivity.this.getPackageName();
  22.  
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27. initView();
  28. }
  29.  
  30. /**
  31. * 初始化页面组件及数据
  32. */
  33. private void initView() {
  34. RxView.clicks(findViewById(R.id.btnLogin)).subscribe(new Action1<Void>() {
  35. @Override
  36. public void call(Void aVoid) {
  37. login();
  38. }
  39. });
  40. }
  41.  
  42. /**
  43. * 登录请求
  44. */
  45. public void login() {
  46. //把参数封装到map中
  47. HashMap map = new HashMap<String, String>();
  48. map.put("tid", "login");
  49. map.put("userName", "xiaoming");
  50. map.put("passWd", "qwer1234");
  51.  
  52. //使用类Retrofit生成接口IPost的实现
  53. IPost loginService = App.RetrofitInstance().create(IPost.class);
  54.  
  55. loginService.login(map)
  56. //设置call()执行的线程为新起一个线程
  57. .subscribeOn(Schedulers.newThread())
  58. //设置onNext()执行的线程在主线程中
  59. .observeOn(AndroidSchedulers.mainThread())
  60. .subscribe(new Subscriber() {
  61. @Override
  62. public void onCompleted() {
  63.  
  64. }
  65.  
  66. @Override
  67. public void onError(Throwable e) {
  68. Log.i(TAG, e.getMessage());
  69. }
  70.  
  71. @Override
  72. public void onNext(Object o) {
  73. Toast.makeText(MainActivity.this, o.toString(), Toast.LENGTH_SHORT).show();
  74. }
  75. });
  76. }
  77. }

Retrofit+Okhttp+RxJava打造网络请求之Post的更多相关文章

  1. 学习RxJava+Retrofit+OkHttp+MVP的网络请求使用

    公司的大佬用的是这一套,那我这个菜鸟肯定要学习使用了. 我在网上找了很多文章,写的都很详细,比如 https://www.jianshu.com/u/5fd2523645da https://www. ...

  2. kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式

    今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...

  3. Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

    前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...

  4. 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)

    首先,展示一下封装好之后的项目的层级结构. 1.先创建一个RetrofitApiService.java package com.xdw.retrofitrxmvpdemo.http; import ...

  5. 一步步搭建Retrofit+RxJava+MVP网络请求框架(二),个人认为这次封装比较强大了

    在前面已经初步封装了一个MVP的网络请求框架,那只是个雏形,还有很多功能不完善,现在进一步进行封装.添加了网络请求时的等待框,retrofit中添加了日志打印拦截器,添加了token拦截器,并且对Da ...

  6. android开发学习 ------- Retrofit+Rxjava+MVP网络请求的实例

    http://www.jianshu.com/p/7b839b7c5884   推荐 ,照着这个敲完 , 测试成功 , 推荐大家都去看一下 . 下面贴一下我照着这个敲完的代码: Book实体类 - 用 ...

  7. retrofit okhttp RxJava bk Gson Lambda 综合示例【配置】

    项目地址:https://github.com/baiqiantao/retrofit2_okhttp3_RxJava_butterknife.git <uses-permission andr ...

  8. Android 的OkHttp(发送网络请求)

    今天讲的是和HttpURLConnection差不多的OkHttp; 先把网站献上: 官网介绍okhttp的: https://square.github.io/okhttp/ 下载postman的: ...

  9. 浅谈我为什么选择用Retrofit作为我的网络请求框架

    比较AsyncTask.Volley.Retrofit三者的请求时间 使用 单次请求 7个请求 25个请求 AsyncTask 941ms 4539ms 13957ms Volley 560ms 22 ...

随机推荐

  1. python if语法

    1.查看数据类型 print(type(1)) 2.同类型:数字相加 ,字符串拼接 a=input("输:") print(int(a)+5) 3.单if条件语句 if if 3& ...

  2. win10输入法问题,已禁止IME 问题解决

    第一种较为简单的解决方法: windows+R打开「运行」,然后打ctfmon,确定. 另外一种解法: windows的老bug了解决办法: 1. I. WIN + X 打开控制面板 -> 管理 ...

  3. apicloud含有微信支付。支付宝支付和苹果内购的代码

    apicloud含有微信支付.支付宝支付和苹果内购的代码 <!DOCTYPE html> <html> <head> <meta charset=" ...

  4. 6.1 Spark SQL

    一.从shark到Spark SQL Hive能够把SQL程序转换成map-reduce程序   可以把Hadoop中的Hive看作是一个接口,主要起到了转换的功能,并没有实际存储数据. Shark即 ...

  5. 2018年蓝桥杯A组C/C++决赛题目

    2018年蓝桥杯A组C/C++决赛题目 2018年蓝桥杯A组C/C++决赛题解     1:三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为: (2.3, 2.5) (6.4, 3.1) (5 ...

  6. IntelliJ IDEA 快捷键(七)

    /*方法参数提示*/ ctrl + p /*折叠代码/展开代码*/ ctrl + - / ctrl + + /*快速查找和打开最近使用过的文件*/ ctrl + E /*自动代码片*/ ctrl + ...

  7. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于Wi-Fi模块(ESP8266)AT指令TCP透传方式,MQTT通信控制升级(加入数据校验)

    前言 这节演示下,上两节写的利用MQTT来控制STM32控制的程序 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootLoader程序(请自行下载) 首先BootLo ...

  8. strcspn()函数

    函数描述: 检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符. 函数声明: #include<string.h> size_t strcspn(const char ...

  9. 数据仓库004 - 复习Linux shell命令 - vi 进程 端口号 系统命令 高危命令 wget yum rpm压缩

    一.复习 1.vi的使用方法: 1.1 .正常编辑一个文件,保存退出 1.2. 粘贴的坑:必须在i键 编辑模式 2.找error cat xxx.log | grep -C 10 ERROR > ...

  10. FileSystemResource 和 ClassPathResource 有何区别

    在FileSystemResource 中需要给出spring-config.xml文件在你项目中的相对路径或者绝对路径.在ClassPathResource中spring会在ClassPath中自动 ...