RxJava2二刷

rxjava2二刷:
1、java.lang.illegalstateexception: exception thrown on scheduler.worker thread. add `onerror` handling.
caused by: rx.exceptions.onerrornotimplementedexception: can‘t create handler inside thread that has not called looper.prepare()
错误代码:
//rxbinding开源组件运用(compile ’com.jakewharton.rxbinding:rxbinding:1.0.0‘ 不支持rxjava2)
//debounce(1000,timeunit.milliseconds)防止按钮重复点击,有bug,点击按钮的时候要过1000毫秒后才能弹出toast,体验并不好
button btn = (button)findviewbyid(r.id.btn);
rxview.clicks(btn).debounce(1000,timeunit.milliseconds).subscribe(new action1){
@override
public void call(void avoid) {
//非主线程不能更新ui及弹toast,可以打印日志
toast.maketext(webactivity.this,“你的美貌不如你的热闹”,toast.length_short).show();
log.i(“wanlijun”,“你的美貌不如你的热闹”);
//改进
mhandler.sendemptymessage(1);
}
}
private handler mhandler = new handler(looper.getmainlooper()){
@override
public void handlemessage(message msg) {
switch (msg.what) {
case 1:
toast.maketext(webactivity.this,“你的美貌不如你的热闹”,toast.length_short).show();
break;
}
}
};
备注:上面是我没有深入了解debounce和throttlefirst,狭隘了
//debounce是过滤操作符,就是在设定的间隔时间内对结果进行过滤,这个过程中只会取最后的结果给订阅者,忽略中间结果
//上面的点击按钮过了1000ms才响应,就是取1000ms内的最终结果,肯定得等到1000ms过了才能知道最后的结果
//debounce运用:优化app搜索功能
edit = (edittext)findviewbyid(r.id.edit);
rxtextview.textchanges(edit).debounce(400,timeunit.milliseconds) //只取400ms时间段内最后的输入结果作为查询条件
.subscribeon(androidschedulers.mainthread())//监听edittext需要在主线程中
.filter(new predicate(){ //只有输入不为空才进行后面的操作
@override
public boolean test(@nonnull charsequence charsequence) throws exception {
//如果你想输入一个字符就执行一次的话可以把这个跟debounce(400,timeunit.milliseconds)顺序对换
//不然的话这个就是400ms执行一次
return charsequence.tostring().trim().length()》0;
}
})
.switchmap(new function》》() {//用switchmap替换flatmap是为了解决发送了两个请求,但是第一个请求的结果后返回来,导致界面显示的结果不正确的问题
//switchmap处理如下:当有两次请求发出的时候,switchmap只会发射第二次请求的observable
@override
public observablesource》 apply(@nonnull charsequence charsequence) throws exception {
log.i(“wanlijun”,“world wide web 我的世界”);
return observable.just(arrays.aslist(“java”, “c#”, “clojure”));
}
})
.observeon(androidschedulers.mainthread())
.subscribe(new observer》() {
@override
public void onsubscribe(@nonnull disposable d) {
}
@override
public void onnext(@nonnull list strings) {
log.i(“wanlijun”,“onnext”);
}
@override
public void onerror(@nonnull throwable e) {
}
@override
public void oncomplete() {
}
});
//throttlrfirst操作符,防抖,防止按钮重复点击或点击过快
//rxbinding2开源组件运用(compile ’com.jakewharton.rxbinding2:rxbinding:2.0.0‘ 支持rxjava2)
//防止按钮点击过快(取1000ms内的第一次点击响应)
rxview.clicks(hahabtn).throttlefirst(1000,timeunit.milliseconds).subscribe(new observer() {
@override
public void onnext(@nonnull object o) {
//惊不惊喜,意不意外,不用加subscribeon(androidschedulers.mainthread()),也没有用handler,可以直接弹toast哦!
toast.maketext(webactivity.this,“你的美貌不如你的热闹”,toast.length_short).show();
log.i(“wanlijun”,“你的美貌不如你的热闹”);
}
@override
public void oncomplete() {
log.i(“wanlijun”,“oncomplete”);
}
@override
public void onerror(@nonnull throwable e) {
log.i(“wanlijun”,“onerror”);
}
@override
public void onsubscribe(@nonnull disposable d) {
log.i(“wanlijun”,“onsubscribe”);
}
});

Zigbee组网原理详解
刚性机械臂的动力学建模
手机快充QC2.0技术简介和认证须知
XY002新移开源MT2503开发板
电源开关设计基础
RxJava2二刷
PCB杂散电容大小计算方法 PCB杂散电容怎么消除
步进电动机的构造及工作原理
AI时代下的新黑科技家居神器,智能魔镜显示屏来袭
运用替代能源进行远端感测
MEMS麦克风厂商钰太2020年第四季每股获利2.45元新台币
ELAF-100L-T30009力传感器的技术应用
Intel第11代酷睿处理器已逼近7GHz
Agilent53220A频率计数器350MHz
华为发布智能手机——Mate20 X 5G版 带芯片巴龙5000
APS生产排程解决企业库存规划挑战
IEEE Fellow 2021入选名单揭晓 华人学者高达75人占比26.6%
CAN协议栈与LIN协议栈介绍
英特尔的Rocket Lake处理器阵容正在逼近
IPv4向IPv6过渡的难题