RxJava使用笔记
来源:互联网 发布:人人商城v2 数据库 编辑:程序博客网 时间:2024/06/08 01:08
private void initDate() { File filefodeer = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/行车示意图/DriveSketchMap/DriveSketchMap_files/"); if (filefodeer.exists()) { File[] files = filefodeer.listFiles(); Observable.from(files)//以所有文件数组创建一个被观察者对象 .flatMap(new Func1<File, Observable<File>>() {//过滤 @Override public Observable<File> call(File file) { return Observable.from(file.listFiles());//对过滤的每个文件对象再次创建被观察者对象 } }) .filter(new Func1<File, Boolean>() {//过滤操作符 @Override public Boolean call(File file) { return file.getName().endsWith(".png"); } }) .take(1)//take()输出最多指定数量的结果。 .doOnNext(new Action1<File>() { @Override public void call(File file) { //doOnNext()允许我们在每次输出一个元素之前做一些额外的事情, // 比如这里的保存标题。 } }) .map(new Func1<File, Bitmap>() { @Override public Bitmap call(File file) { return collectionBitmap(file);//过滤后的bitmap对象进行返回 } }) .subscribeOn(Schedulers.io())//指定订阅的线程 .observeOn(AndroidSchedulers.mainThread())//指定观察者的线程 主线程 .subscribe(new Action1<Bitmap>() { @Override public void call(Bitmap bitmap) { image.setImageBitmap(bitmap);//设置对象 } }); } public Bitmap collectionBitmap(File file) { Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); return bitmap;}创建观察者对象的几种方法 public void creatObServerable() { //创建观察者对象1 rx.Observer observer = new rx.Observer() { //内部转化成subscriber @Override public void onCompleted() { Log.d("tag", "onCompleted"); } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { } }; Subscriber subscriber = new Subscriber() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { } }; //创建被观察者的几种方法 Observable observable1 = Observable.create(new Observable.OnSubscribe<String>() { @Override //onsubscibe对象会被保存在返回的observable对象中,用于后面回调onsubscibe call方法 public void call(Subscriber<? super String> subscriber) {//回调方法 subscriber.onStart();//初始化一些数据 ,在订阅的线程中发生, // 如果需要在主线程中发生的不能在此初始化 subscriber.onNext(""); subscriber.onCompleted(); //subscriber.onError(e);//try catch后进行发送 } }); //方法2 Observable observable2 = Observable.just("hh", "gg"); //订阅后 将会一次调用下面方法 // onNext("hh"); // onNest("gg"); // oncompleted(); //方法3 String[] data = {"hh", "gg"}; Observable observable = Observable.just(data); Observable observable3 = Observable.from(data); //数据会传入OnSubscribeFromArray对象中, // 此对象实现了OnSubscribe接口回回调对象的call方法 (参数中传入一个观察者对象subscrber对象) //最后我们可以讲处理完的数据传给回调观察者的onNext方法中 实现更新数据 //将会一次调用下面方法 // onNext("hh"); // onNest("gg"); // oncompleted(); //创建完别观察这 观察者 开始订阅 observable.subscribe(observer);//方式一 observable.subscribe(subscriber);//方式2 内部返回一个Subscription对象 用于取消订阅 //observable 持有一个onsubsriber对象,内部开始回调onsubcribe.call方法 // 真正开始发送事件的地方就是订阅的时候//rxjava支持不完整定义的回调 final Action1<String> onNextaction = new Action1<String>() { @Override public void call(String s) { //Log.e(); } }; Action1<Throwable> onerroraction = new Action1<Throwable>() { @Override public void call(Throwable throwable) { //处理错误 } }; Action0 oncompleteaction = new Action0() {//必须是rxjava的ation0接口 @Override public void call() { } }; observable.subscribe(onNextaction);//返回的subscribe方法中会默认加上 onerror,oncomplete方法 observable.subscribe(onNextaction, onerroraction);//同上 observable.subscribe(onNextaction, onerroraction, oncompleteaction);//不完整定义回调//三个方法内部会调用此方法 subscribe(new ActionSubscriber<T>(onNext, onError, onCompleted)); subscribe内部返回 return subscribe(new ActionSubscriber<T>(onNext, onError, onCompleted)); //ActionSubscriber继承观察者subsriber,三个action对象地址付给actionsubsriber对象的三个变量 // final Action1<? super T> onNext;//分别回调action的对应的call方法 // 相当于回调obser的onNext oncomplete onerror方法 // final Action1<Throwable> onError; //final Action0 onCompleted; //目的都是回调subscrbier的方法}//项目中使用的一个小demo public void update() throws Exception { Observable.create(new Observable.OnSubscribe<List<String>>() { @Override public void call(Subscriber<? super List<String>> subscriber) { try { //方法暂时没有抽取 Cursor bridgeCurosr = DataSupport.findBySQL("select distinct strRailLineName from BridgeTable");//去重 while (bridgeCurosr.moveToNext()) { String strraillinename = bridgeCurosr.getString(bridgeCurosr.getColumnIndex("strraillinename")); listLine.add(strraillinename);//加入集合中 } bridgeCurosr.close(); subscriber.onNext(listLine); subscriber.onCompleted(); } catch (Exception e) { subscriber.onError(e); } } }) .map(new Func1<List<String>, List<String>>() { @Override public List<String> call(List<String> list) { return getFilterList(list);//再次过滤 } }).map(new Func1<List<String>, List<String>>() { @Override public List<String> call(List<String> list) { DataSupport.deleteAll(LineData.class); for (String str : list) { LineData data = new LineData(); data.setStrName(str); data.save(); } return list; } }) .subscribeOn(Schedulers.immediate())//本身此方法就在子线程中执行 所以指定为当前线程 .observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<List<String>>() { @Override public void call(List<String> list) {//处理发送过来的数据逻辑 } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { BaseDialog.showAlert(throwable.getMessage(), m_Context); } });}private List<String> getFilterList(List<String> listLine) { Iterator<String> iterator = listLine.iterator(); while (iterator.hasNext()) { String next = iterator.next(); if (!listFilterLine.contains(next)) { listFilterLine.add(next); } } return listFilterLine;} //还有很多操作符以后慢慢学习 }
0 0
- RXJAVA 基础使用笔记
- RxJava使用笔记
- RxJava学习笔记---简单使用
- RXjava具体使用(自己的笔记)
- RxJava笔记--02(Android中使用RxAndroid)
- Android开发笔记:RxJava学习使用
- RxJava笔记
- Rxjava笔记
- RxJava笔记
- RxJava笔记
- rxJava笔记
- RxJava笔记
- RxJava笔记
- RxJava笔记
- RxJava笔记
- RxJava----使用
- RxJava使用
- RXjava 使用
- html和xml
- 一款非常漂亮的bootstrap表单checkbox/radio样式推荐
- Backtracking
- 排序
- swift中的for循环
- RxJava使用笔记
- RecyclerView子View不刷新(RequestLayout无效),RecyclerView.mEatRequestLayout
- Oracle监听的常用命令及监听日志分析
- 由一个私有静态变量的处理问题谈java内存模型
- API文档自动生成工具
- 461. Hamming Distance
- 密码算法
- 深刻理解HDFS工作机制
- LruCache缓存