添加依赖
dependencies {
compile 'io.reactivex:rxjava:1.2.0'
compile 'io.reactivex:rxandroid:1.2.1'
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'
}
封装基础网络请求
public interface IpServiceForPost {
@FormUrlEncoded
@POST("getIpInfo.php")
Observable<HttpResult<IpData>> getIpMsg(@Field("ip") String ip);
}
public class HttpRequest {
private static final HttpRequest httpRequest = new HttpRequest();
private CompositeSubscription mCompositeSubscription;
private HttpRequest() {
mCompositeSubscription = new CompositeSubscription();
}
public static HttpRequest getHttpRequest() {
return httpRequest;
}
public void postIpInformation(String ip){
String baseUrl = "http://ip.taobao.com/service/";
// 构建 Retrofit
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
IpServiceForPost ipServiceForPost = retrofit.create(IpServiceForPost.class);
// 发起网路请求
Subscription subscription = ipServiceForPost.getIpMsg("")
.subscribeOn(Schedulers.io()) // 子线程
.observeOn(AndroidSchedulers.mainThread()) // 切换会主线程
.subscribe(new Subscriber<HttpResult<IpData>>() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable e) {
System.out.println("onError" + e.getMessage());
}
@Override
public void onNext(HttpResult<IpData> ipDataHttpResult) {
System.out.println("onNext:" + ipDataHttpResult.toString());
}
});
// 添加请求
mCompositeSubscription.add(subscription);
}
/**
* 取消请求:在Activity 或者 Fragment 生命周期的 onStop()
*/
public void cancelRequest(){
if (mCompositeSubscription!=null){
mCompositeSubscription.unsubscribe();
}
}
}
客户端调用
// 发起网络请求
HttpRequest.getHttpRequest().postIpInformation("");
// 取消请求
HttpRequest.getHttpRequest().cancelRequest();