我正在尝试使用OpenWeatherMap API创建一个应用。我面临的问题是搜索功能。我想实现AutoCompleteTextView
,但是在这里我面临以下问题:
我需要下载包含所有城市的JSON数组。包含所有文件的文件为4mb,但打包在gzip存档中。我可以打开包装并使用下面提供的代码下载。解压后输出文件为28mb。
val listUrl =
URL("http://bulk.openweathermap.org/sample/city.list.json.gz")
try {
//try to get connection with given url
val connection: HttpURLConnection =
listUrl.openConnection() as HttpURLConnection
connection.connect()
if (connection.responseCode == 200){
//if connection was succesful
//take data from the URL, ungzip and save in app
//directory as "citylist.json"
var stream = connection.inputStream
stream = GZIPInputStream(stream)
val inputSource = InputSource(stream)
val input = BufferedInputStream(inputSource.byteStream)
val output = FileOutputStream(context.filesDir.toString() + "/citylist.json") as OutputStream
val buffer = ByteArray(connection.contentLength)
var count = 0
var total = 0
while ({count = input.read(buffer); count}() != -1) {
total += count
output.write(buffer, 0, count)
}
output.flush()
output.close()
input.close()
}
} catch (e: FileNotFoundException){
Log.e("Not found", e.toString())
} catch (e: IOException){
Log.e("404", e.toString())
} catch (e: BufferOverflowException){
Log.e("Buffer", e.toString())
}
仍然在每个应用程序启动应用程序上,都必须遍历每一行代码以从JSON数组读取,创建字符串数组并将其设置为ArrayAdapter并将其设置为AutoCompleteTextView
。这是一项繁重的工作,因此我担心应用程序的性能会降低或消耗大量电池。
有人可以建议我实现目标的任何想法吗?假设我在搜索引擎所在的任何其他在线应用程序上工作,实现看起来是否与本示例相同?