这是用RxJava实现的一个简单demo

这是用RxJava实现的一个简单demo

RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库),这就是 RxJava 。概括得非常精准(不过单凭靠这几句话也比较难理解)。
首先需要jar包:

dependencies {

    compile 'io.reactivex:rxandroid:1.1.0'
    compile 'io.reactivex:rxjava:1.1.0'

}
/**
*点击按钮下载图片并显示;
 imagePath ="http://images2015.cnblogs.com/blog/841455/201512/841455-20151201235212327-794268895.jpg";
*/

 public void downLoadImage(View view) {
 //Observable是被观察者;大家记住OnSubscribe<Bitmap>里面的bitmap;
        Observable.create(new Observable.OnSubscribe<Bitmap>() {
            @Override
          public void call(Subscriber<? super Bitmap> subscriber) {
                Bitmap bitmap = getBitMap();
                //onNext的方法传入的参数;
                subscriber.onNext(bitmap);
               subscriber.onCompleted();
            }
        }).subscribeOn(Schedulers.io())
          .doOnSubscribe(new Action0() {
                    @Override
                    public void call() {
                        progressBar.setVisibility(View.VISIBLE);
                    }
                })
         .subscribeOn(AndroidSchedulers.mainThread())
         .observeOn(AndroidSchedulers.mainThread())
          .subscribe(new Subscriber<Bitmap>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }
                  //得到onNext里面的参数
                    @Override
                    public void onNext(Bitmap bitmap) {
                        progressBar.setVisibility(View.GONE);
                        bitmapImage.setImageBitmap(bitmap);
                    }
                });
    }

    public Bitmap getBitMap() {
        try {
            URL url = new URL(imagePath);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            int responseCode = conn.getResponseCode();
            if (responseCode == 200) {
                InputStream inputStream = conn.getInputStream();

                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                Log.d("自定义打印说明", "getBitMap(): " + bitmap);
                return bitmap;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

解释一下:

1.RxJava 有四个基本概念:
Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。
Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。
2.在 RxJava 中, Observable并不是在创建的时候就立即开始发送事件,而是在它被订阅的时候,即当 subscribe() 方法执行的时候。(当 Observable 被订阅的时候,OnSubscribe 的 call() 方法会自动被调用)
3.Scheduler (调度器),可以使用 它的subscribeOn() 和 observeOn() 两个方法来对线程进行控制。
subscribeOn(): 指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程(事件产生的线程)
observeOn(): 指定 Subscriber 所运行在的线程(事件消费的线程)
4.因为指定是在io线程中,所以可以直接 Bitmap bitmap = getBitMap();不用再开线程;
注:感谢 作者:扔物线 的给 Android 开发者的 RxJava 详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值