2020-05-28-Android-RxJava

观察者模式

下面写了一个简单例子,实现图片的异步加载。
首先实现一个Observer对象,用来接收数据,更新图片内容。
onNext方法接收一个Bitmap对象。

public class RxObserver implements Observer {

    private static final String TAG = "RxObserver";

    private ImageView imageView;

    public void setImageView(ImageView img) {
        imageView = img;
    }

    @Override
    public void onSubscribe(@NonNull Disposable d) {
        Log.d(TAG, "onSubscribe");
    }

    @Override
    public void onNext(Object o) {
        Log.d(TAG, "onNext " + o.toString());
        imageView.setImageBitmap((Bitmap) o);
    }

    @Override
    public void onError(@NonNull Throwable e) {
        Log.d(TAG, "onError " + e);
    }

    @Override
    public void onComplete() {
        Log.d(TAG, "onComplete");
    }
}

然后实现一个Observable对象,被观察者,用来提供数据。

    private static class RxObservable implements ObservableOnSubscribe {

        private Object data;

        public RxObservable(Object obj) {
            data = obj;
        }

        @Override
        public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
            Log.d(TAG, "subscribe");
            emitter.onNext(data);
            emitter.onComplete();
        }
    }

最后通过subscribe方法,连接被观察者和观察者,传递数据。

    private void loadImg() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                InputStream is = null;
                try {
                    is = openFileInput("疯狂动物城.jpg");
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                RxHelper.getObservable(bitmap).subscribe(observer);
            }
        }).start();
    }

参考

Android Rxjava:这是一篇 清晰 & 易懂的Rxjava 入门教程
GitHub地址
RxJava 多线程控制
Android RxJava:手把手教你使用RxJava
详解Android RxJava的使用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。