本文属于作者学习Rxjava的第二篇,进行了一些简单的封装。
Retrofit一款基于Android的网络请求框架,底层基于Okhttp,被谷歌官方认可,最好的解释。
RxJava在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库),我个人感觉在于异步的操作,切换线程的方便,以及代码逻辑的简单。在比较复杂的逻辑中,Rxjava的代码依然简单易懂。
接口
Retrofit调用网络请求需要封装出一个接口,采用Get方式请求网络,不同的是这里返回的是一个Observable对象,getLoginInfo登录方法,QueryMap 请求的键值对的设置。不懂得可以去看一下
Retrofit的基本用法,
public interface WorkerApis {
public static String apis="接口请自己选择";
@GET("接口")
Observable<List<LoginBean>> getLoginInfo(@QueryMap HashMap<String,String> map);
}
Retrofit请求
addConverterFactory添加解析方式,addCallAdapterFactory与Rxjava进行关联,client设置一些OkhttpClient的网络请求参数设置,可以不设置
public Retrofit getRetrofit(){
retrofit=new Retrofit.Builder()
.baseUrl(WorkerApis.apis)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(getOkHttpClient())
.build();
return retrofit;
}
public OkHttpClient getOkHttpClient(){
OkHttpClient okHttpClient=new OkHttpClient();
//设置超时时间
okHttpClient.newBuilder().connectTimeout(10, TimeUnit.SECONDS);
return okHttpClient;
}
网络请求
通过Rxjava的观察者模式可以很方便的切换线程,执行请求
workerApis=retrofitRequest.getRetrofit().create(WorkerApis.class);
workerApis.getLoginInfo(map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
Activity中的请求
最后送上activity中的全部代码,很简单。
public class MainActivity extends AppCompatActivity {
public RxJavaRequest rxJavaRequest;
public Button button;
public TextView textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rxJavaRequest=new RxJavaRequest();
button= (Button) findViewById(R.id.button);
textview= (TextView) findViewById(R.id.textview);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HashMap<String,String> map=new HashMap<>();
map.put("j_username","**********");
map.put("j_password","******");
rxJavaRequest.getRequestDatas(map, new RxCallback<List<LoginBean>>() {
@Override
public void onSuccess(List<LoginBean> loginBeen) {
textview.append("onSuccess");
textview.append("\n");
textview.append(loginBeen.get(0).getMessage());
}
@Override
public void onFails(Throwable t) {
textview.append("onFails");
textview.append("\n");
}
});
}
});
}
}
想看代码的,可以直接点击:link text