最近一年,Rxjava在Android开发社区中很是活跃。刚接触完全是迷茫状态,看了大神blog,有了一定的了解在通过简单使用,记录初步

本文叙述的内容

  • RxJava是什么
  • RxJava作用
  • Rxjava使用

RxJava 是什么

一个词可以描述,异步。 把这个看作异步的另外一种方式就很好理解了。它是跟AsyncTask,Handler放在一起作比较的。 举一个例:通过天气API获取结果。 需导入RxJava.jar,RxAndroid.jar或者依赖,首先有一个方法:根据API同步获得请求结果

//控件
TextView tv;
public static final String url_weatherApi = "http://wthrcdn.etouch.cn/weather_mini?city=北京";
// okhttp 同步的get请求
private String requestGet(String url)

Hander:

new Thread(new Runnable() {

            @Override
            public void run() {
                final String requestGet = requestGet(url_weatherApi);
                tv.post(new Runnable() {

                    @Override
                    public void run() {
                        tv.setText(requestGet);
                    }
                });
            }
        }).start();

AsyncTask:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new MyTask().execute(url_weatherApi);
    }
    private class MyTask extends AsyncTask<String, String, String>{

        @Override
        protected String doInBackground(String... params) {

            String result = requestGet(params[0]);

            return result;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            tv.setText(result);
        }

    }

Rxjava :

   Observable.just(url_weatherApi)

        .map(new Func1<String, String>() {
//第一个String是参数,即params = url_wetherApi,第二个String是返回结果(用法详见其他博文)
                @Override
                public String call(String params) {
                    return requestGet(params);
                }
        .subscribeOn(Schedulers.io()) //在io线程(子线程)中操作map转换操作
        .observeOn(AndroidSchedulers.mainThread())//在主线程中运行->subscribe里面的
        .subscribe(new Action1<String>() {

                    @Override
                    public void call(String result) {
                    //上面return的String
                        tv.setText(result);
                    }
                });

第一眼看起来RxJava似乎更复杂了,对于初学的确是这样。但是当你用习惯了之后,你会发现这个比handler好用很多

RxJava 作用

rxJava比其他好用之处就在于当你会了之后,通过链式调用看rxJava写的代码条理清晰。

Rxjava 使用

接下来是RxAndroid在Android中的使用。 RxBinding(需导入RxBinding.jar)。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        iv = (ImageView) findViewById(R.id.imageView);
        ev1 = (EditText) findViewById(R.id.editText1);
        ev2 = (EditText) findViewById(R.id.editText2);
        cb = (CheckBox) findViewById(R.id.checkBox1);

        //ev1的内容状态监听,相当于ev1.addTextChangedListener(watcher),只不过比他好用。
        RxTextView.textChanges(ev1).subscribe(new Action1<CharSequence>() {

            @Override
            public void call(CharSequence arg0) {
                tv.setText(arg0);
            }
        });

    }
//监听checkBox的状态
RxCompoundButton.checkedChanges(cb).subscribe(new Action1<Boolean>() {

            @Override
            public void call(Boolean arg0) {
                if(arg0){
                    iv.setVisibility(View.VISIBLE);
                }else{
                    iv.setVisibility(View.GONE);
                }
            }
        });
⤧  Next post Android导入第三方静态库.a编译成.so ⤧  Previous post Android自定义权限处理