在android中获得自动完成的最佳方法

时间:2012-05-26 06:20:43

标签: android autocomplete autocompletetextview

我的应用使用来自网络服务器的数据。在网站上,您可以使用一些需要毫秒才能运行的ajax调用来获得自动完成功能。但是在android的情况下我需要从网站获取所有关键词,将它们存储在一个数组中,制作n个适配器并将其设置为AutoCompleteTextView。问题是我在服务器上有一些10K的关键字,所以获取如此庞大的数据是一个问题。那么在我的案例中有没有其他方法可以实现自动完成?谢谢

2 个答案:

答案 0 :(得分:2)

您显然必须在非UI线程中预取数据,以免ANR应用程序,并以某种本地缓存或服务的形式访问它,以便不获取相同的数据反复。

选项按最简单到最复杂的顺序排列:

  1. 使用AsyncTask并将结果存储在某种静态变量中。
  2. 使用(1)中的AsyncTask或类似概念,但将结果存储在缓存中,如Guava中的那些:http://code.google.com/p/guava-libraries/wiki/CachesExplained
  3. 建立服务:http://developer.android.com/reference/android/app/Service.html#WhatIsAService。可以根据呼叫的复杂性来分层服务的体系结构。如果您从ajax调用中检索的域很复杂并且不仅仅用于此自动完成功能,请查看repository模式。

答案 1 :(得分:0)

制作类似于网站上实现的自动完成功能并不是一个更好的主意,即当用户键入一定数量的字符时,会在下拉列表中提取并显示建议。我相信普通用户最多会使用100个关键字(取决于您正在制作的应用)。这就是我在自己的应用程序中所做的事情,它与您要实现的目标有相似之处。我当然使用AsyncTask来获取建议。

如果您必须下载所有10k关键字,为什么不只使用关键字创建一个静态数组(假设它们在数据库中没有变化)。