RxAndroid初学记录

来源:互联网 发布:上海对外经贸大学知乎 编辑:程序博客网 时间:2024/05/16 14:24

Android Studio使用RxAndroid需要在app下的gradle文件配置如下:(个人使用了RxBinding,所以会有相关的支持)

<pre name="code" class="java">    compile 'io.reactivex:rxandroid:1.2.1'    compile 'io.reactivex:rxjava:1.1.9'    compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'

使用传统的OnClickListener监听:

        Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                login();//请求网络,登录            }        });

此时若手指抖动,多点击几次屏幕,此时我在1s内连续点击三次屏幕,则可以看到日志输出,此时访问了三次网络


使用RxBinding去监听控件的点击:

        Button button = (Button) findViewById(R.id.button);        RxView.clicks(button)        .throttleFirst(500, TimeUnit.MILLISECONDS)//消除手指抖动造成的多次连击        .subscribe(new Action1<Void>() {            @Override            public void call(Void aVoid) {                login();            }        });
此时我在1s内多次点击屏幕,日志输出如下,只访问一次网络请求


使用throttleFirst设置,可以消除手指抖动时造成的多次点击响应


使用RxAndroid+Okhttp访问网络请求数据:

public static Observable postRequest(final String url, final Map<String, String> params){        return Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                FormBody.Builder builder = new FormBody.Builder();                for (String key : params.keySet())                    builder.add(key, params.get(key));                FormBody build = builder.build();                Request request = new Request.Builder().url(url).post(build).build();                OkHttpClient okHttpClient = new OkHttpClient();                try {                    Response response = okHttpClient.newCall(request).execute();                    if (response.code() == 200)                        if (!subscriber.isUnsubscribed())                            subscriber.onNext(response.body().string());                } catch (IOException e) {                    subscriber.onError(e);                } finally {                    subscriber.onCompleted();                }            }        });    }
调用方法如下:

postRequest(url, params).subscribeOn(Schedulers.io())//在io线程中获取网络数据.observeOn(AndroidSchedulers.mainThread())//执行操作在UI线程.subscribe(new Observer<String>() {        @Override        public void onCompleted() {            Log.e(TAG, "onCompleted");//当所有的onNext()调用完成后会调用此方法结束        }        @Override        public void onError(Throwable e) {            Log.e(TAG, e.getMessage());        }        @Override        public void onNext(String s) {            Log.e(TAG, s);//获取数据        }    });





0 0
原创粉丝点击