@ivan8m8

Почему один и тот же код выполняется по-разному на эмуляторе и на реальном Android устройстве (кодировка)?

Добрый день.

Очень долгое время писал приложение под Android и тестировал его на эмуляторе.
Когда решил протестировать на реальном девайсе, приложение упало.
Спустя некоторе время удалось обнаружить, что проблема в том, что не удаётся получить посредством JSON массив.

В логе при запуске на эмуляторе вижу, что ответи приходит следующий:
{"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"проспект Вернадского, ...


В логи при запуске на смартфоне:
{"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"????? ??????, ????? ...


В принципе я вижу, что сообщение теряется, после того как попадает к ним на сервер ( https://geocode-maps.yandex.ru).
Потому что в тех же логах видно, что им приходит сообщение:
...format=json&geocode=проспект%20Вернадского, %20Москва


Но вот ответ от них приходит, как я писал выше со знаками вопроса, вместо проспекта Вернадского.

Что можете посоветовать? Я уже пробовал кодировать в несколько кодировок, знаки вопроса в ответе так же остаются.

String preUrl = "https://geocode-maps.yandex.ru/1.x/?format=json&geocode="
                            + myObjects.get(position).getField.toString;
                    preUrl = preUrl.replace(" ", "%20");
                    URL url = new URL(preUrl);
                    Log.d("KSI++", url.toString());
                    URLConnection urlConnection = url.openConnection();
                    InputStream inputStream = urlConnection.getInputStream();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                    StringBuilder result = new StringBuilder();
                    String line;
                    while ((line = bufferedReader.readLine()) != null) {
                        result.append(line);
                        Log.d("KSI18", result.toString());
                    }
                    try {
                        JSONObject jsonObject = new JSONObject(result.toString());
                        JSONArray jsonArray = jsonObject.getJSONObject("response").getJSONObject("GeoObjectCollection").getJSONArray("featureMember");
                        location = jsonArray.getJSONObject(0).getJSONObject("GeoObject").getJSONObject("Point").getString("pos");
                        Log.d("KSI++++", location + " EHRERERE!");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@ivan8m8 Автор вопроса
Решил. URLEncoder.
String preUrl = "https://geocode-maps.yandex.ru/1.x/?format=json&geocode="
                            + URLEncoder.encode(myObjects.get(position).getField.toString, "UTF-8");

+ stackoverflow.com/questions/10786042/java-url-enco...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы