在单独的线程中从服务获取 AutoCompleteTextView 建议

2024-06-25

For my AutoCompleteTextView我需要从网络服务获取数据。由于这可能需要一点时间,我不希望 UI 线程没有响应,因此我需要以某种方式在单独的线程中获取数据。例如,从 SQLite DB 获取数据时,使用以下命令非常容易完成CursorAdapter方法 -runQueryOnBackgroundThread。我正在寻找其他适配器,例如ArrayAdapter, BaseAdapter,但找不到类似的东西...

有没有一种简单的方法可以实现这一目标?我不能简单地使用ArrayAdapter直接,因为建议列表是动态的 - 我总是根据用户输入获取建议列表,因此无法预取和缓存它以供进一步使用...

如果有人可以就这个主题提供一些提示或示例 - 那就太好了!


通过上述方法,我在快速打字时也遇到了这些问题。我猜这是因为结果的过滤是由过滤器类异步完成的,所以在过滤完成时修改 ui 线程中的 Adapter 的 ArrayList 时可能会出现问题。

http://developer.android.com/reference/android/widget/Filter.html http://developer.android.com/reference/android/widget/Filter.html

然而,通过以下方法一切正常。

public class MyActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MyAdapter myAdapter = new MyAdapter(this, android.R.layout.simple_dropdown_item_1line);

        AutoCompleteTextView acTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
        acTextView.setAdapter(myAdapter);
    }
}

public class MyAdapter extends ArrayAdapter<MyObject> {
    private Filter mFilter;

    private List<MyObject> mSubData = new ArrayList<MyObject>();
    static int counter=0;

    public MyAdapter(Context context, int textViewResourceId) {
      super(context, textViewResourceId);
      setNotifyOnChange(false);

      mFilter = new Filter() {
        private int c = ++counter;
        private List<MyObject> mData = new ArrayList<MyObject>();

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
          // This method is called in a worker thread
          mData.clear();

          FilterResults filterResults = new FilterResults();
          if(constraint != null) {
            try {
              // Here is the method (synchronous) that fetches the data
              // from the server      
              URL url = new URL("...");
              URLConnection conn = url.openConnection();
              BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
              String line = "";

              while ((line = rd.readLine()) != null) {
                      mData.add(new MyObject(line));
              }
            }
            catch(Exception e) {
            }

            filterResults.values = mData;
            filterResults.count = mData.size();
          }
          return filterResults;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence contraint, FilterResults results) {
          if(c == counter) {
            mSubData.clear();
              if(results != null && results.count > 0) {
                ArrayList<MyObject> objects = (ArrayList<MyObject>)results.values;
                for (MyObject v : objects)
                  mSubData.add(v);

                notifyDataSetChanged();
              }
              else {
                notifyDataSetInvalidated();
              }
          }
        }
    };
  }

  @Override
  public int getCount() {
    return mSubData.size();
  }

  @Override
  public MyObject getItem(int index) {
    return mSubData.get(index);
  }

  @Override
  public Filter getFilter() {
    return mFilter;
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在单独的线程中从服务获取 AutoCompleteTextView 建议 的相关文章

  • GridView 的行中列宽不同

    我有一个 GridView 需要在其中显示图像 我应用了以下逻辑 If 1 Photo 1 row and 1 col and full width image If 2 Photos 1 row and 2 cols with equal
  • VBScript 线程

    不久前 我在 vbscript 中将这段多线程代码拼凑在一起 然后我再次将其取出以将其应用于另一个问题 我现在遇到一个问题 运行命令 第 20 行 的返回值始终为 0 我意识到我已经使用了False作为 WaitOnReturn 参数 但否
  • 从 SynchronizationContext 派生

    简而言之 我实现了一个从 SynchronizationContext 派生的类 以便 GUI 应用程序可以轻松地使用 GUI 线程以外的线程上引发的事件 我非常感谢对我的实施提出评论 具体来说 有什么是您建议反对的或可能会导致我未预见到的
  • 无法绑定到调试器的本地 XXXX

    我不断得到Can t bind to local XXXX for debugger控制台中的消息 但不适用于 1 个端口 适用于所有随机端口 我已经完成了中所述的操作这个问题 https stackoverflow com questio
  • 如何在android中播放来自URL的流媒体视频?

    我想在 android 中播放网站上的流媒体视频 例如 我想播放来自以下网址的流视频 http florotv com canal2 html http florotv com canal2 html 使用 URL Helper 我已经能够
  • 透明模糊视图模糊了下面的布局

    我有一个已设为透明的 Linearlayout 现在我正在寻找一种方法来赋予它模糊效果 因此它下面的内容会变得模糊 就像 Windows 7 Aero 外观一样 参见屏幕截图 我知道你可以做这样的模糊效果 getWindow addFlag
  • 使用 Gradle 构建未签名的 APK

    目前我正在尝试学习 Gradle 来构建 Android APK 如何在 gradle 中设置选项来构建未签名的 APK 您不必设置任何选项 只需运行常规任务即可 gradle assemble 这将在project build apk 中
  • 在 Android 中将连续动画应用到 ImageView

    我想将连续的动画 例如 ScaleAnimation 应用到显示资源图像的 ImageView 动画由按钮触发 例如 我想在每次单击按钮时逐渐放大图像 我已在动画上设置 fillAfter true 但是 所有动画都是从 ImageView
  • 限制执行第三方软件的线程的权限

    我正在开发一个基于 Eclipse 的应用程序 能够执行第三方组件 不是 eclipse plugin 每个组件都有一个列出权限 以及相应动机 的自定义描述符 这样最终用户可以决定是否执行它 组件在单独的线程中执行 如何根据描述符限制这些线
  • 如何在改造中在主体内传递 JSON 数组

    intent sale redirect urls return url http example com your redirect url html cancel url http example com your cancel url
  • 如何从内存中清除动态创建的视图?

    我试图从记忆中清除一些观点 情况是这样的 我有一个活动 我将其称为 A 另一个称为 B 现在 我在 Activity A 中按下一个按钮 该按钮调用 Activity B 动态创建大量视图 之后 我按后退按钮返回到活动 A 多次重复这两个步
  • 从设备获取日期并将其转换为 GMT+4

    我正在尝试查找 Android 手机的时区 因为我想获取日期对象 但我想要 GMT 4 格式 我看到的所有其他答案都会转换来自 API 请求的时间 其时区已知 我怎样才能做到这一点 其他方法可能是将服务器传来的 GMT 4 时间转换为我设备
  • 无法启动由 ContextImpl.openFileOutput 处的 NullPointerException 引起的活动

    我发布了一个使用 Google 地图 Android 兼容性库的应用程序 https github com petedoyle android support v4 googlemaps https github com petedoyle
  • java应用程序,线程在终止MySQL连接后挂起

    我有一些工作线程正在运行 其中包括 MySQL 和 mysql connector java 5 1 20 当我杀死一些 SQL 语句 使用 mysql 客户端的kill 连接id 时 java线程挂起 这应该抛出一些异常 jstack 打
  • Gradle 警告:不推荐使用variant.getOutputFile() 和variant.setOutputFile()

    我在 Android 应用程序项目中使用以下简化配置 android compileSdkVersion 20 buildToolsVersion 20 0 0 defaultConfig minSdkVersion 8 targetSdk
  • 在 libgdx 中截取屏幕截图

    我有一个应用程序 我想在其中截取游戏屏幕的屏幕截图并将其保存为图像并上传到 Facebook 我正在使用 Libgdx 我的重点是 android 谁能帮助我如何以编程方式截取游戏屏幕并将其另存为图像 现在相当容易 Libgdx提供了一个例
  • 如何在 Android 键盘中包含建议

    我正在开发 Android 软键盘 我已经创建了键盘布局 但不知道如何包含在 EditText 中键入一些单词时出现的建议 例如 如果我写 在 中 已知 和 已知 将显示在建议中 所以我的问题是 1 如何在 Android 软键盘中包含建议
  • Android 位图内存问题 - 错误:8294416 字节分配内存不足

    我目前正在开发一个讲述故事的应用程序 该故事包含 场景 其中包含通过 ImageView 显示的多个 JPEG 和 PNG 文件 我创建 ImageView 并通过以下函数将其添加到布局中 private ImageView newImag
  • Android:Html 锚链接仅在 Web 视图中有效一次

    在使用锚链接加载 html 内容时 我在 webview 中遇到一些奇怪的问题 以下代码非常适合锚标记 但是只有一次 第二次当我按下锚标签时不工作 protected void onCreate Bundle savedInstanceSt
  • 如何从 Activity 的包含类启动 Intent

    我正在寻找从不是 Activity 而是 Activity 类的包含对象的类启动意图的最佳方法 例如活动类 Class MainActivity extends ListActivty TestLauncher tester 以及我想从中开

随机推荐

  • PyQt4 中的多个窗口?

    我刚刚开始使用 pyqt4 我遵循了教程 http zetcode com tutorials pyqt4 http zetcode com tutorials pyqt4 让我困惑的一件事是这部分 def main app QtGui Q
  • 在 C 中初始化字符串的正确方法

    我见过人们的代码为 char str NULL 我也看到过这个 char str 我想知道初始化字符串的正确方法是什么 你什么时候应该初始化一个带有 NULL 的字符串 你应该在使用它之前设置它 这是你唯一的规则have遵循以避免未定义的行
  • Hyperledger Composer 网络安装

    您好 我在尝试作曲家网络安装时遇到问题 安装业务网络 这可能需要一分钟 错误 尝试安装业务网络时出错 错误 没有来自任何同行的有效响应 尝试对等通信的响应是错误 Error 14 UNAVAILABLE Connect Failed 作曲家
  • beautiful soup有没有办法计算html页面中标签的数量

    我正在考虑在 python 中创建一个字典 其中键是 html 标签名称 值是标签出现的次数 有没有办法用漂亮的汤或其他东西来做到这一点 BeautifulSoup 非常适合 HTML 解析 您当然可以将它用于此目的 这将非常简单 from
  • 给 MVVM 中的 View 一些命令

    假设我有一些用户控制权 用户控件有一些子窗口 用户控制用户想要关闭某种类型的子窗口 用户控制代码后面有一个方法 public void CloseChildWindows ChildWindowType type 但我无法调用此方法 因为我
  • 下载的 csv 中的“_csv.Error:行包含 NUL”

    我已经从 url 下载了一个 csv 文件并使用csv reader阅读其内容 不过我得到了 csv Error line contains NUL当我尝试迭代时 csv reader object 我不得不提的是如果我手动复制粘贴 ctr
  • 如何从 Java 中的 Random 中获取种子?

    我正在为某个对象创建深度克隆 该对象包含一个Random 从种子中取回种子是个好习惯吗 Random 如果是这样 怎么办 没有一个Random getSeed 获取种子的一种更简单的方法是生成一个种子并将其存储为种子 我正在游戏中使用这种方
  • 如何在 Xamarin.iOS 中使用 @selector

    现在我想在我的 xamarin iOS 项目中实现一些功能 我找到了解决方案 但在 Objective C 中实现 它使用了关键字 selector 我发现这个问题 https stackoverflow com questions 321
  • 如何在 Perl 中生成数组的所有排列?

    生成所有内容的最佳 优雅 简单 高效 方式是什么 n perl 中数组的排列 例如 如果我有一个数组 arr 0 1 2 我想输出所有排列 0 1 2 0 2 1 1 0 2 1 2 0 2 0 1 2 1 0 它可能应该是一个返回迭代器的
  • Firefox 和 IE:从缓存检索数据时损坏数据

    我向服务器发出一个请求 如下所示 http localhost Combine aspx flag file1 js file2 js file3 js 我也尝试过这个 http localhost Combine aspx flag va
  • Microsoft Graph API:取消重复事件

    我目前尝试使用 Microsoft Graph API 通过以下调用取消一组定期会议 POST users prinicipalName calendar events id cancel 我收到了不支持的段类型错误 我可以一次删除一个事件
  • 使用 jQuery 异步加载图像

    我想使用 jQuery 在我的页面上异步加载外部图像我尝试过以下方法 ajax url http somedomain com image jpg timeout 5000 success function error function r
  • 为什么 writedump 函数不需要在 cfscript 中使用分号?

    通常 CFSCRIPT 标记中编写的所有语句都必须以半色 结尾 但今天我正在处理示例代码 我忘记在 writedump 函数之后编写分号 但代码仍然执行良好 下面是示例代码 这可以很好地工作 在声明的末尾 只是好奇为什么 writeDump
  • 使用 OpenSSL 从证书签名请求中提取请求的有效期

    我们使用由 OpenSSL 提供支持的私有证书颁发机构来对我们的客户进行身份验证 我们提供了一个简单的基于 Web 的实用程序 允许他们上传 CSR 文件以供证书颁发机构签名 目前 我们只能颁发固定期限的证书 目前为 365 天 然而 我们
  • SSDT 单元测试:从配置文件读取 SQL Server 单元测试设置时发生错误

    我在 Visual Studio 2013 professional 中创建了一个数据库项目 然后通过右键单击存储过程之一并选择来添加单元测试创建单元测试 选择创建一个新的VB测试项目 然后右键单击新创建的测试项目并选择SQL Server
  • 在本地环境中禁用jms监听器

    如何在本地环境中禁用 jms 侦听器 由于我没有从本地环境连接到 MQ 因此我不希望我的控制台日志因尝试连接 MQ 消息而被淹没 所以我想在本地禁用它 我正在使用 Spring boot 和基于注释的编程 我在这里看到帖子建议将属性中的 a
  • 如何在TWebBrowser中显示相对路径图像?

    我正在 DesignMode Doc DesignMode On 中使用 TWebBrowser 来编写 HTML 文档 TWebBrowser 中没有加载文档 磁盘上的 HTML 文件 我直接在 TWebBrowser 中从零开始创建文档
  • 在 Python 3 的 Pytz 模块中将 EST、CST 和 DST 时区转换为 unix 时间戳

    我有一个采用以下格式的日期 2019 12 13 20 18 EST or 2019 12 13 20 18 DSTor 2019 12 13 20 18 CST 我想将它们转换为unix timestamp 我在用Pytz module
  • 检测霍夫圆android

    我正在尝试使用 android 检测圆圈 我成功实现了检测线算法 但在尝试绘制霍夫圆算法时没有显示任何内容 这是我的代码 Mat thresholdImage new Mat getFrameHeight getFrameHeight 2
  • 在单独的线程中从服务获取 AutoCompleteTextView 建议

    For my AutoCompleteTextView我需要从网络服务获取数据 由于这可能需要一点时间 我不希望 UI 线程没有响应 因此我需要以某种方式在单独的线程中获取数据 例如 从 SQLite DB 获取数据时 使用以下命令非常容易