1)配置

dependencies{
...
compile 'io.reactivex:rxjava:1.2.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.squareup.retrofit2:retorfit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
}

2)修改请求网络接口

Retrofit请求接口返回Call。若结合RxJava,则需要把Call改为Observable

public interface IpServiceForPost{
@FormUrlEncoded
@POST("getIpInfo.php")
Observable<IpModel> getIpMsg(@Field("ip") String first);
}

3)修改请求网络方法

private void postIpInformation(String ip){
String url = "http://ip.taobao.com/service/";
Retrofit retrofit = new Retrofit.Builder().baseUrl(url).addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
IpServiceForPost ipService = retrofit.create(IpServcieForPost.class);
subscription=ipService.getIpMsg(ip).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<IpModel>(){
@Override
public void onCompleted(){
Log.d(TAG,"onCompleted");
}
@Override
public void onError(Throwable e){
Log.d(TAG,"onError");
}
@Override
public void onNext(IpModel ipModel){
String country=ipModel.getData().getCountry();
Toast.makeText(getApplicationContext(),country,Toast.LENGTH_SHORT).show();
}
});
}

4)请求返回数据格式封装

public class IpModel{
private int code;
private IpData data;
public void setCode(int code){
this.code = code;
}
public int getCode(){
return this.code;
}
...
}
public class HttpResult<T>{
private int code;
private T data;
public int getCode(){
return code;
}
public void setCode(int code){
this.code = code;
}
public T getData(){
return data;
}
public void setData(T data){
this.data = data;
}
}
public interface IpServiceForPost{
@FormUrlEncoded
@POST("getIpInfo.php")
Observable<HttpResult<IpData>> getIpMsg(@Field("ip") String first);
}
private void postIpInformation(String ip){
...
subscription=ipService.getIpMsg(ip).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<HttpResult<IpData>>(){
@Override
public void onCompleted(){
}
@Override
public void onError(Throwable e){
}
@Override
public void onNext(HttpResult<IpData> ipDataHttpResult){
IpData data=ipDataHttpResult.getData();
Toast.matkText(getApplicationContext(),data.getCountry(),Toast.LENGTH_SHORT).show();
}
});
}

5)取消请求

@Override
public void onStop(){
super.onStop();
if(subscription!=null && subscription.isUnsubscribed()){
subscription.unsubscribe();
}
}
private CompositeSubscription compositeSubscription = new CompositeSubscription();
...
//发送请求的地方,将返回的subscription添加到compositeSubscription中
compositeSubscription.add(subscription);
...
//取消所有请求
@Override
public void onStop(){
super.onStop();
compositeSubscription.unsubscribe();
}

最新文章

  1. [LeetCode] Game of Life 生命游戏
  2. Qt中新建类构造函数的初始化参数列表
  3. C# ListView用法详解
  4. response压缩响应
  5. Heap:Expedition(POJ 2431)
  6. WinForm下窗体标题栏上有“帮助”按钮
  7. hadoop map reduce 实例wordcount的使用
  8. 指定 ubuntu server ip
  9. Extension Method[上篇]
  10. 理解ThreadLocal
  11. Python SqlAlchemy使用方法
  12. 使用oracle来计算方差及标准差
  13. ECLIPSE中反编译插件JAD的配置安装,轻松查看JAVA源代码
  14. SLAM+语音机器人DIY系列:(四)差分底盘设计——2.stm32主控软件设计
  15. Linux(Ubuntu 16) 下Java开发环境的配置(一)------JDK的配置
  16. Java 多线程案例
  17. Oracle12c中容错&amp;amp;性能新特性之表空间组
  18. Python基础2--Python简单数据类型
  19. PHP 5.2、5.3、5.4、5.5、5.6 对比以及功能详解
  20. python带参装饰器的改良版

热门文章

  1. QToolButton按钮
  2. springboot使用elasticsearch报No property index found for type错误
  3. MacOs -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
  4. 【反射】利用java反射原理将xml文件中的字段封装成对应的Bean
  5. servlet相关
  6. Kali2.0更新
  7. Freemarker导出带多个不重复图片的word
  8. Maven安装配置操作
  9. sklearn中的回归器性能评估方法(转)
  10. Linux的记事本 Vi和Vim