在这个列子里,只介绍RxJava和Retrofit的简单初级配合使用,最懒,意思就是说,你完全可以看着我的列子,不用管原理,直接套用就行,而这里没有对其封装,原生态的使用方法
- 实现需求
就做一简单的网络请求 。点击请求打印json数据
一、配置
- 依赖
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
//rx生命周期管理
compile'com.trello:rxlifecycle:0.3.0'
compile'com.trello:rxlifecycle-components:0.3.0'
- 权限
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 网络状态权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
二、使用步骤
1、创建Service定义请求接口
package com.daqsoft.newrx;
import com.daqsoft.newrx.bean.Weather;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import rx.Observable;
/**
* Created by yanbo on 2017/6/9.
* 接口数据
*/
public interface HttpService {
@POST("AppFiftyToneGraph/videoLink")
Observable<RetrofitEntity> getAllVedioBy(@Body boolean once_no);
//自己 的
@GET("homePageWeather.action?region=510131")
Observable<Weather> getWeatherData();
}
2、MainActivity里使用
看代码直观。
/**
* Retrofit加入rxjava实现http请求
*/
private void reQuest() {
//1、手动创建一个OkHttpClient并设置超时时间
okhttp3.OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(5, TimeUnit.SECONDS);
//2、new Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.client(builder.build())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl("http://www.izaodao.com/Api/")
.build();
// 加载框
final ProgressDialog pd = new ProgressDialog(this);
//3、Retrofit对象得到service对象
HttpService apiService = retrofit.create(HttpService.class);
//4、service对象方法获取observable对象,开始请求
Observable<RetrofitEntity> observable = apiService.getAllVedioBy(true);
observable.subscribeOn(Schedulers.io()).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(
new Subscriber<RetrofitEntity>() {
@Override
public void onCompleted() {
if (pd != null && pd.isShowing()) {
pd.dismiss();
}
}
@Override
public void onError(Throwable e) {
if (pd != null && pd.isShowing()) {
pd.dismiss();
}
}
@Override
public void onNext(RetrofitEntity retrofitEntity) {
mTvMsg.setText("无封装:\n" + retrofitEntity.getData().toString());
}
@Override
public void onStart() {
super.onStart();
pd.show();
}
}
);
}