当前位置: 首页 > 知识库问答 >
问题:

带有Json文件的Android错误-E/fetchweatherstask错误

太叔炎彬
2023-03-14

我在尝试获取json文件时出错。

Json:

http://api.openweathermap.org/data/2.5/forecast/daily?q=94043

错误:

04-25 04:12:32.086    3875-3897/com.example.g250.dublinweather.app E/FetchWeatherTask﹕ Error

代码:

protected Void doInBackground(Void... params) {
        // These two need to be declared outside the try/catch
        // so that they can be closed in the finally block.
        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;

        // Will contain the raw JSON response as a string.
        String forecastJsonStr = null;

        try {
            // Construct the URL for the OpenWeatherMap query
            // Possible parameters are avaiable at OWM's forecast API page, at
            // http://openweathermap.org/API#forecast
            URL url = new URL("http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7");

            // Create the request to OpenWeatherMap, and open the connection
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();

            // Read the input stream into a String
            InputStream inputStream = urlConnection.getInputStream();
            StringBuffer buffer = new StringBuffer();
            if (inputStream == null) {
                // Nothing to do.
                return null;
            }
            reader = new BufferedReader(new InputStreamReader(inputStream));

            String line;
            while ((line = reader.readLine()) != null) {
                // Since it's JSON, adding a newline isn't necessary (it won't affect parsing)
                // But it does make debugging a *lot* easier if you print out the completed
                // buffer for debugging.
                buffer.append(line + "\n");
            }

            if (buffer.length() == 0) {
                // Stream was empty.  No point in parsing.
                return null;
            }
            forecastJsonStr = buffer.toString();

            //Debugging
            Log.v(LOG_TAG, "Json String" + forecastJsonStr);

        } catch (IOException e) {
            Log.e(LOG_TAG, "Error ", e);
            // If the code didn't successfully get the weather data, there's no point in attemping
            // to parse it.
            return null;
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (final IOException e) {
                    Log.e(LOG_TAG, "Error closing stream", e);
                }
            }
        }
        return null;
    }
}

json文件有问题,但我无法解决。谁能帮我?

谢谢!!

共有1个答案

洪永长
2023-03-14

只需对 json 请求使用凌空抽射非常简单(有关凌空抽射,请参阅此处),而在此处使用 Gson。为了包含它们,请将以下内容添加到您的 gradle 构建文件中

compile 'com.google.code.gson:gson:2.3'
compile 'com.mcxiaoke.volley:library:1.0.15'

这是通过凌空发出json请求的代码示例。简单多了

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, urlJson,
        (String)null, new Response.Listener<JSONObject>() {

  @Override
  public void onResponse(JSONObject response) {

    try {
      // Parsing json object response
      Gson gson = new Gson();
      // Do your stuff here to parse it in your model
     }catch (Exception e) {
        // log here your error 
     }
  }, new Response.ErrorListener() {

  @Override
  public void onErrorResponse(VolleyError error) {
    VolleyLog.d(LOGTAG, "Error: " + error.getMessage());
    Log.e(LOGTAG, "Error while executing getNetworkFeed");
  }
});

// Adding request to request queue
getInstance().addToRequestQueue(jsonObjReq);

}

 类似资料: