• Retrofit + rxjava 使用案例


    配置:

     retrofit 到 rxjava 转化库

    compile 'io.reactivex:rxandroid:1.9.0'
    compile 'io.reactivex:rxjava:1.9.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'

    Retrofit 配置:
    Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL).client(client)
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .build();

    案例1: 与Retrofit 配合使用

    //接口:    
    @FormUrlEncoded @POST("userv2/login") Observable<Base<User>> login(@Field("mobile") String mobile,@Field("password") String password,@Field("deviceType") String deviceType);
    使用:
    RestClient.getApiService().login(phone, encryptPassword,"0").subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Base<User>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Base<User> userBase) { } });

    案例2: 搜索框搜索相关列表,自动延迟400ms, 

    //搜索并回显
    mSearchResultsSubject = PublishSubject.create(); mTextWatchSubscription = mSearchResultsSubject .debounce(400, TimeUnit.MILLISECONDS) .observeOn(Schedulers.io()) .map(new Func1<String, List<String>>() { @Override public List<String> call(String s) { return mRestClient.searchForCity(s); } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<List<String>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(List<String> cities) { handleSearchResults(cities); } });
    // 文本框自动输入 mSearchInput.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { mSearchResultsSubject.onNext(s.toString()); } @Override public void afterTextChanged(Editable s) { } });  

    案例3:发送验证码后,倒计时功能

    final long count = TOTAL_TIME / 1000;
            Observable.interval(0, 1, TimeUnit.SECONDS)//设置0延迟,每隔一秒发送一条数据
                    .take((int) (count + 1)) //设置总共发送的次数
                    .map(new Func1<Long, Long>() { //将数值倒置
                        @Override
                        public Long call(Long aLong) {
                            return count - aLong; //
                        }
                    })
                    .subscribeOn(Schedulers.computation())
                    // doOnSubscribe 执行线程由下游逻辑最近的 subscribeOn() 控制,下游没有 subscribeOn() 则跟Subscriber 在同一线程执行
                    //执行计时任务前先将 button 设置为不可点击
                    .doOnSubscribe(new Action0() {
                        @Override
                        public void call() {
                            mStart.setEnabled(false);//在发送数据的时候设置为不能点击
                            mStart.setBackgroundColor(Color.GRAY);//背景色设为灰色
                        }
                    })
                    .observeOn(AndroidSchedulers.mainThread())//操作UI主要在UI线程
                    .subscribe(new Subscriber<Long>() {
                        @Override
                        public void onCompleted() {
                            mTvValue.setText(getResources().getString(R.string.done));
                            mStart.setEnabled(true);
                            mStart.setBackgroundColor(Color.parseColor("#f97e7e"));
                        }
    
                        @Override
                        public void onError(Throwable e) {
                            e.printStackTrace();
                        }
    
                        @Override
                        public void onNext(Long aLong) { //接收到一条就是会操作一次UI
                            String value = String.valueOf(aLong);
                            mTvValue.setText(value);
                        }
                    });
    

      



  • 相关阅读:
    双向链表的创建,查找,删除
    atoi 函数自实现
    strcmp,strcpy,strcat,strncmp,strncpy,strncat,自实现精炼版本
    天生棋局(堆上申请二维空间的应用)
    使用二级指针,初始化一级指针
    指针数组的简单理解
    输入二进制数,输出10进制数
    阶乘循环联系题
    [剑指offer] 二叉搜索树的第k个节点
    二叉树的序列化和反序列化
  • 原文地址:https://www.cnblogs.com/songsh/p/6573481.html
Copyright © 2020-2023  润新知