Android 利用Rxjava实现和后台数据的动态匹配补全

本文介绍了RxJava在Android开发中的使用方法,包括如何通过RxJava实现文本视图的动态自动补全功能,并探讨了其背后的观察者模式原理。文中还详细解释了RxJava的关键概念如Observer、Observable和subscribe等,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android AutoCompleteTextView动态自动补全

上一次写了

什么是Rxjava

      RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。

Github原址:

观察者模式

观察者:关系着监视被观察者的行为,当被观察者某个状态改变的时候会通知观察者观察者会执行对应的操作。

被观察者:被监视的对象,某个当状态改变的时候会通知观察者。

订阅:观察者观察者建立联系。

在程序中的具体表示

观察者:Observer

被观察者:Observable

订阅:subscribe()

使用

首先在gradle中添加依赖:

compile 'io.reactivex:rxjava:1.0.14' 
compile 'io.reactivex:rxandroid:1.0.1'

一次Rxjava的简单使用:

  RxTextView.textChanges(act)
                .debounce(10, TimeUnit.MILLISECONDS)
                .skip(1)/*去掉第一次选中*/
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<CharSequence>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(final CharSequence charSequence) {
                     
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "对Error事件作出响应" );

                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "对Complete事件作出响应");
                    }

                });

其中比较重要的就是OnNext()方法 它的作用是当用户输入的Textview发生改变的时候执行的方法。可以在里面写上自己发送至服务器请求的代码比如:

@Override
                    public void onNext(final CharSequence charSequence) {
                        
                      new Thread() {
                            public void run() {
                                ChatMessage chat = SearchHttp.sendMessage(charSequence.toString());
                                Message message = new Message();
                                message.what = 0x1;
                                message.obj = chat;
                                handler2.sendMessage(message);

                            }
                        }.start();

                    }

这里我采用的是使用一个新的线程对Http发送参数至服务器取值然后通过Mseeage 和Handler传值来进行相应的操作。

这里我推荐建一个新的线程来执行操作 因为实际情况下如果不新建线程的话你的app会奔溃。

这里再说明一下操作符的使用

 .debounce(10, TimeUnit.MILLISECONDS)
 .skip(1)/*去掉第一次选中*/
 .observeOn(AndroidSchedulers.mainThread())

其中第一个操作符debounce表示只有当用户输入关键字后10毫秒才发射数据[说的直白点就是10毫秒后才会走后面的逻辑]。

skip表示当用户第一次选中Textview的时候并不会执行程序 也就是说防止程序将第一次选中的空白字符发送到服务器 避免没有必要的错误。

比较全面的Rxjava操作符链接Android RxJava:这是一份全面 & 详细 的RxJava操作符 使用攻略

Rxjava的功能比较强大 还有许多强大的功能没有使用 后面用到的话会陆续补充。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值