zoukankan      html  css  js  c++  java
  • 第一次技术博客

    Rxjava+Retrofit+okhttp 网络请求框架学习

    学习利用okhttp下载文件

    okhttp:一个处理网络请求的开源项目,是安卓端最火热的轻量级框架
    retrofit:Retrofit是Square公司开源的一个高质量高效率的http库,它将我们自己开发的底层的代码和细节都封装了起来
    rxjava:一种用Java语言实现的响应式编程,来创建基于事件的异步程序
    在当下okhttp+retrofit+rxjava是一种比较火热的网络请求框架,在这个框架中:
    okhttp主要承担的是创建网络请求client,网络请求过程的作用,大概就是设置网络不稳定时进行重新连接,超时,拦截器等。

    CLIENT = OkHttpClient.Builder()
                    .cache(Cache(File(context.cacheDir, "okhttp"), 10 * 1024 * 1024L))
                    .connectTimeout(10, TimeUnit.SECONDS)
                    .readTimeout(30, TimeUnit.SECONDS)
                    .writeTimeout(10, TimeUnit.SECONDS)
                    .build()
    

    这里主要设置了缓存空间,超时连接,读写超时

    retrofit其实也是可以单独使用,用来进行网络的请求,但是与okhttp结合后,retrofit的作用体现在对okhttp创建的网络请求进行封装。但是有所不同的是,在retrofit中我们需要定义一个返回接口

    public interface RequestServes {
        @POST("mobileLogin/submit.html")
        Call getReslut(@Query("loginname") String loginname);
    }
    

    在接口中我们可以看到,我们返回了一个Call类型的对象,在okhttp我们返回的是一个Responsebody类型的对象。如果我们在retrofit中也想得到一个Responsebody里数据,我们可以这样定义接口

    public interface RequestServes {
        @POST("mobileLogin/submit.html")
        Call<Responsebody>  getReslut(@Query("loginname") String loginname);
    }
    

    得到Call后我们可以选择同步或者异步来处理回调。下面贴出异步处理回调的做法

    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            try {
                System.out.println(response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            t.printStackTrace();
        }
    });
    

    对于rxjava我个人认为主要作用体现在异步处理时方便切换线程的作用吧。(学的不深,还有很多东西没搞清楚)首先我们需要被观察者Observable,观察者Observer。两者通过subscribe来实现订阅关系。其中我们可以通过subscribeOn和observeOn来规定他们所在的线程。与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。

    @FormUrlEncoded
        @POST("getClassFile")
        fun getClassFile(@Field("cid")cid: Int): Observable<DataList<TeacherList>>  //引入rxjava我们回调时要返回一个Observable对象
    
    fun getClassFile(cid: Int): Observable<ArrayList<TeachersFile>> =
                FileApi.IMPX.getClassFile(cid)
                        .subscribeOn(Schedulers.io())
                        .observeOn(Schedulers.io())
                        .map {
                            it.data.courseFile
                        }
                        .onErrorResumeNext { err: Throwable ->
                            Observable.just(ArrayList())
                        }
    

    ........

  • 相关阅读:
    java的锁机制
    视图生命周期
    UIButton @selector 想要传递多个参数
    UIButton @selector 想要传递多个参数
    UITableView 实现A1A2---Z1Z2.。。。。
    iOS 代理
    PickerView
    照片墙
    分栏控制器
    XIB 拖控件
  • 原文地址:https://www.cnblogs.com/hshdsb/p/7845341.html
Copyright © 2011-2022 走看看