【问题标题】:Not receiving any data from OpenWeatherMap api android studio未从 OpenWeatherMap api android studio 接收任何数据
【发布时间】:2018-05-24 11:47:43
【问题描述】:

我不知道问题到底出在哪里,只要我登录到来自 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();
        }



    }
}

如果你能帮助我,那就太棒了,我很高兴能制作自己的天气应用程序!

【问题讨论】:

    标签: java android api openweathermap


    【解决方案1】:

    您不会像这样转换单个字节并转换为字符:

    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) {
        }
    }
    

    【讨论】:

    • 您好,感谢您的回复,非常感谢。我想知道,你有一个工作的例子吗?我对这个领域很陌生,根据我的知识,我没什么可继续的。我很欣赏你的工作!
    • 我已经为您提供了示例代码。您使用的是 Java 还是库中的“JSONObject”?
    • 我在 Java 中使用它们从 api 获取信息。我不确定将代码放在哪里/确切替换什么。再次,我对此很陌生,对不起。了解这段代码的具体工作原理会有所帮助。
    • 你是使用 Java 还是库中的 JSONObject
    • 我从 OpenWeatherMap api 获得了我的“JSONObject”。我相信那是一个图书馆。
    猜你喜欢
    • 2021-09-24
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 2021-04-04
    • 2017-02-20
    • 1970-01-01
    相关资源
    最近更新 更多