Не получаю никаких данных от Android-студии OpenWeatherMap api - PullRequest
0 голосов
/ 24 мая 2018

Я не знаю, в чем именно проблема, приложение вылетает каждый раз, когда я регистрирую информацию из API.Это код.Я не знаю, устарел ли код, я использую новейшую версию Android Studio.

public class DownloadTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... urls) {

        String result = "";
        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(urls[0]);

            urlConnection = (HttpURLConnection) url.openConnection();

            InputStream in = urlConnection.getInputStream();

            InputStreamReader reader = new InputStreamReader(in);

            int data = reader.read();

            while (data != -1) {

                char current = (char) data;

                result += current;

                data = reader.read();

            }

            return result;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        try {

            JSONObject jsonObject = new JSONObject(result);

            String weatherInfo = jsonObject.getString("weather");

            Log.i("Weather content", weatherInfo);

            JSONArray arr = new JSONArray(weatherInfo);

            for (int i = 0; i < arr.length(); i++) {

                JSONObject jsonPart = arr.getJSONObject(i);

                Log.i("main", jsonPart.getString("main"));
                Log.i("description", jsonPart.getString("description"));

            }


        } catch (JSONException e) {
            e.printStackTrace();
        }



    }
}

Если бы вы могли мне помочь, это было бы здорово, я очень рад, что мойсобственное приложение о погоде!

1 Ответ

0 голосов
/ 24 мая 2018

Вы не конвертируете один байт и не конвертируете в символ, как это:

char current = (char) data;

Ваша строка result будет содержать много странных символов

Вместо этого вы переноситеот InputStreamReader до BufferedReader, читайте построчно и собирайте JSON.

Еще один более простой способ - использовать JSONObject для чтения вашего потока:

JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject)jsonParser.parse(
          new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));

Затем измените ваш AsyncTask, чтобы он возвращал JSONObject напрямую

public class DownloadTask extends AsyncTask<String, Void, JSONObject> {

    @Override
    protected String doInBackground(String... urls) {

        String result = "";
        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(urls[0]);

            urlConnection = (HttpURLConnection) url.openConnection();

            InputStream in = urlConnection.getInputStream();

            InputStreamReader reader = new InputStreamReader(in, "UTF-8");
            JSONParser jsonParser = new JSONParser();
            return (JSONObject)jsonParser.parse(reader);;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
    @Override
    protected void onPostExecute(JSONObject result) {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...