之前一直在准备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的更多相关文章

  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. 版本管理·玩转git(分支管理)

    在开发中,遇到这样的情况怎么办? 网站已有支付宝在线支付功能,要添加"微信支付",修改了两个文件,wechat.php.pay.php. 刚做到一半,突然有个紧急bug:支付宝支付 ...

  2. Node.js实现热加载

    不管是node.js原生开发,还是借助express,kora等框架开发node.js的情况下,在对代码做出更新后,都是需要重启已生效我们的文件的. 本文记录一次在原生node.js开发的时候,为项目 ...

  3. [b0022] python 归纳 (八)_多进程_基本使用

    # -*- coding: UTF-8 -*- """ 测试进程使用 multiprocessing.Process 使用: 1. 准备一个函数<fun>,子 ...

  4. JavaScript—图片与base64编码互相转换

    图片转换为base64编码 <input type = "file" id = "file" onchange="popFileName(thi ...

  5. [视频教程] 基于redis的消息队列实现与思考

    使用redis的list列表来实现消息队列功能,相信大家都听过消息队列,但是在业务中可能并没有真正去使用它.在公司项目中正好有个场景使用到了消息队列,因此就来说一下流程.在web界面上有个功能是群发邮 ...

  6. c# 第28节 面向对象概述

    本节内容: 1:面向对象概述 2:类与对象的概念 1:面向对象概述 面向对象也称:OOP :object-oriented programming 面向对象的程序设计 面向过程:堆代码,从头开始,自己 ...

  7. 树莓派包含python2.7系统路径

  8. QBXT模拟赛1

    总结 期望得分:\(100 + 80 + 10 = 190\) 实际得分:\(90 + 80 + 10 = 180\) 这是在清北的第一场考试,也是在清北考的最高的一次了吧..本来以为能拿\(190\ ...

  9. 剑指offer:对称的二叉树(镜像,递归,非递归DFS栈+BFS队列)

    1. 题目描述 /** 请实现一个函数,用来判断一颗二叉树是不是对称的. 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的 */ 2. 递归 思路: /** 1.只要pRoot.left和 ...

  10. (二十五)golang--数组

    数组:存放多个同一类型的数据.在Go中,数组也是一种值类型数组的基本定义: 数组的内存布局: 数组的地址可以用&取出,且它的地址就是第一个元素的地址 数组不用被被初始化而默认是有值的: 数组中 ...