Ошибка Android с файлом Json — ошибка E/FetchWeatherTask﹕

Я получаю сообщение об ошибке при попытке получить файл json.

Json:

http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7

Ошибка:

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, но я не могу понять, как это исправить. Кто-то, кто может мне помочь?

Спасибо!!


person gon250    schedule 25.04.2015    source источник
comment
У меня также была эта проблема. json отображается в веб-браузере, но не в приложении. Моя проблема заключалась в том, что сервер и администратор решили эту проблему. Мой вопрос связан с введите описание ссылки здесь в моем аккаунте.   -  person hamidreza haajhoseini    schedule 25.04.2015


Ответы (1)


Просто используйте volley для ваших запросов json (см. здесь volley) и здесь для 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);

}

person chris.b    schedule 25.04.2015
comment
Ну, я знаю, кому его использовать, но я действительно хотел бы решить проблему и знать, что это происходит. В любом случае, спасибо! - person gon250; 25.04.2015