RxJava与Retrofit封装简单的网络请求(二)

来源:互联网 发布:mac 安装java jdk 编辑:程序博客网 时间:2024/05/16 08:13

本文属于作者学习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;@Overrideprotected 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

原创粉丝点击