在Android应用中实施OpenWeatherMap搜索引擎

时间:2018-12-08 09:55:50

标签: android networking kotlin

我正在尝试使用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。这是一项繁重的工作,因此我担心应用程序的性能会降低或消耗大量电池。

  • 第二种方法是将文件直接放入Assets文件夹。稍后,我仍然必须执行上述操作。我认为仍然没有意义,因为用户必须从商店下载更大的应用程序,大小为28 mb。
  • 最好的第三种选择,但我不知道如何实现这一点。我已经为此进行了Google搜索,但找不到任何未弃用的方法。使用类似OpenWeatherMap网站https://openweathermap.org/find上的外部搜索引擎。这可以为用户提供预测,但是在用户选择城市应用后,必须提供城市ID(不是名称,不是经纬度,而是ID,以避免不匹配)。

有人可以建议我实现目标的任何想法吗?假设我在搜索引擎所在的任何其他在线应用程序上工作,实现看起来是否与本示例相同?

0 个答案:

没有答案