文档章节

用户搜索的联想词提示场景,避免频繁请求

Gemini-Lin
 Gemini-Lin
发布于 11/10 01:36
字数 308
阅读 10
收藏 0

场景:

用户输入搜索内容,进行输入框的变化监听,提供联想词。

需求:

避免频繁请求,限制时间内获取用户最后想搜索的内容

 

方案1:Handler实现 

利用postDelayed方法和可撤销的removeCallbacks方法实现

private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (EDIT_OK == msg.what) {
                String newText = etSearch.getText().toString();
                if(!TextUtils.isEmpty(newText)) {
                    setInputtipsQuery(newText);
                }
            }
        }
    };

private Runnable mRunnable = new Runnable() {
        @Override
        public void run() {
            mHandler.sendEmptyMessage(EDIT_OK);
        }
    };

etSearch.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                mHandler.removeCallbacks(mRunnable);
                //600毫秒没有输入认为输入完毕
                mHandler.postDelayed(mRunnable, 600);
            }
        });

 

方案2:RxJava操作符进行限流

操作函数:debounce,500毫秒内采取最后一次的操作

subject.debounce(500,      TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<CharSequence>() {

                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable arg0) {

                    }

                    @Override
                    public void onNext(CharSequence charSequence) {
                        Log.d(TAG, "onNext" + charSequence.toString());
                        showSearchResult(charSequence);
                    }
                });


 

 

© 著作权归作者所有

Gemini-Lin
粉丝 21
博文 59
码字总数 30776
作品 0
厦门
程序员
私信 提问
前端针对多次异步请求结果的处理

前言 在前端领域,你应该有见过这两种场景: 在搜索框中输入文本时,不断出现相关的提示词(联想词) 通过轮询向服务端请求数据(尽管跟服务器之间通信的技术层出不穷,但不可否认轮询的使用...

RichardBillion
2018/11/26
0
0
搜索引擎(Elasticsearch搜索详解)

学完本课题,你应达成如下目标: 掌握ES搜索API的规则、用法。 掌握各种查询用法 搜索API 搜索API 端点地址 搜索的端点地址可以是多索引多mapping type的。搜索的参数可作为URI请求参数给出,...

这很耳东先生
03/26
84
0
lucene搜索之拼写检查和相似度查询提示(spellcheck)

suggest应用场景 用户的输入行为是不确定的,而我们在写程序的时候总是想让用户按照指定的内容或指定格式的内容进行搜索,这里就要进行人工干预用户输入的搜索条件了;我们在用百度谷歌等搜索...

xiaomin0322
2018/04/17
237
0
首推快速分享功能 搜狗输入法向人工智能又迈进一大步

(原标题:首推快速分享功能 搜狗输入法向人工智能又迈进一大步) 9月20日,搜狗输入法针对新上线的“快速分享”功能召开了媒体沟通会。会上,产品经理耿雷指出,为了解决日常沟通中搜索信息...

每日经济新闻
2016/09/22
0
0
JavaScript 函数节流和函数去抖应用场景辨析

概述 也是好久没更新 源码解读,看着房价蹭蹭暴涨,心里也是五味杂陈,对未来充满恐惧和迷茫 ...(敢问一句你们上岸了吗) 言归正传,今天要介绍的是 underscore 中两个重要的方法,函数节流...

fish
09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

DDD(十)--仓储

1、引言 DDD中的Repository(仓储):协调领域和数据映射层,利用类似与集合的接口来访问领域对象。——《领域驱动设计-软件核心复杂性应对之道》 仓储是DDD中产生的概念,也就是说,如果应...

MrYuZixian
12分钟前
5
0
Jenkins的多种迁移方法

说明 Jenkins有时需要进行迁移,主目录会发生改变,本文主要讲解如何更改主目录。由于jenkins安装方式的不同,主目录也不一样。 本测试环境:Centos7.6 X64。注意:在更改主目录之前,请一定...

Elson
13分钟前
5
0
好程序员web前端教程分享前端javascript练习题三

好程序员web前端教程分享前端javascript练习题三,cookie 一周内免登录 样式代码: <form action=""> 姓名:<input type="text" id="usename"/><br /> 密码:<input type="text" i="mima"/>......

好程序员官网
32分钟前
5
0
Table 信息转成pojo属性

import com.google.common.base.CaseFormat;import java.sql.*;/** * @author: liyhu * @date: 2019/11/22 */public class TableToPojo { static String url="jdbc:mys......

暗中观察
今天
8
0
Access数据库-C#操作类

//Access数据库-C# 操作类 代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.OleDb;using System.Data;namespace XXX{......

芳缘
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部