Внедрение поисковой системы OpenWeatherMap в приложение Android - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь создать приложение, используя API OpenWeatherMap.Проблема, с которой я сталкиваюсь, связана с функцией поиска.Я хочу реализовать AutoCompleteTextView, но здесь я сталкиваюсь со следующими проблемами:

  • Мне нужно скачать массив JSON, содержащий все города.Файл, содержащий все это, составляет 4 Мб, но он упакован в архив gzip.Я могу распаковать его и скачать с кодом, указанным ниже.После распаковки выходной файл имеет размер 28 МБ.

    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, создать Array of Strings и установить для него значение ArrayAdapter, для которого будет установлено значение AutoCompleteTextView.Это большая работа, поэтому я могу волноваться, что приложение будет иметь низкую производительность или будет потреблять много батареи.

  • Второй вариант, который я могу сделать, это непосредственно поместить файл в папку Assets.Позже я должен все еще делать вещи, описанные выше.Я думаю, что все еще не имеет смысла, потому что пользователь должен был бы загрузить приложение с размером больше на 28 МБ из магазина.
  • Третий вариант, лучший, но я не знаю, как это реализовать.Я гуглил за это, но я не смог найти ничего не осуждаемого.Используйте внешнюю поисковую систему, например, на сайте OpenWeatherMap: https://openweathermap.org/find.Это может дать пользователю прогнозы, но после выбора пользователя приложению города должен быть присвоен идентификатор города (не имя, не широта и долгота, а идентификатор, чтобы избежать несовпадений).

Может кто-нибудь подсказать мне какую-либо идеюкак достичь своей цели?Предполагая, работал ли я над каким-либо другим онлайн-приложением, где находится поисковая система, реализация выглядит так же, как в этом примере?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...