package com.example.asamles.app.charts; import android.os.AsyncTask; import android.os.Bundle; import android.os.Parcelable; import com.google.gson.Gson; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class GetForecastTask extends AsyncTask<Void, Void, Bundle> { private static final String RESULT_RESPONSE = "RESULT_RESPONSE"; private static final String RESULT_ERROR = "RESULT_ERROR"; private long lat; private long lon; private GetForecastTaskListener callback; public interface GetForecastTaskListener { public void onGetForecastTaskComplete(OpenWeatherMapForecastResponse response); public void onGetForecastTaskError(String response); } public GetForecastTask(long lat, long lon, GetForecastTaskListener callback){ this.lat = lat; this.lon = lon; this.callback = callback; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Bundle doInBackground(Void... params) { Bundle result = new Bundle(); String urlString = "http://api.openweathermap.org/data/2.5/forecast/daily?lat=54.868541&lon=83.091134&cnt=10&mode=json&units=metric"; URL url = null; String response = null; try { url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); InputStream inputStream = connection.getInputStream(); response = streamToString(inputStream); Gson gson = new Gson(); OpenWeatherMapForecastResponse responseObject = gson.fromJson(response, OpenWeatherMapForecastResponse.class); result.putParcelable(RESULT_RESPONSE, responseObject); } catch (Exception e) { result.putString(RESULT_ERROR, e.getMessage()); } return result; } @Override protected void onPostExecute(Bundle result) { super.onPostExecute(result); OpenWeatherMapForecastResponse forecast = result.getParcelable(RESULT_RESPONSE); if(forecast != null) { callback.onGetForecastTaskComplete(forecast); } else { callback.onGetForecastTaskError(result.getString(RESULT_ERROR)); } } public String streamToString(InputStream p_is) { try { BufferedReader m_br; StringBuilder m_outString = new StringBuilder(); m_br = new BufferedReader(new InputStreamReader(p_is)); String m_read = m_br.readLine(); while(m_read != null) { m_outString.append(m_read); m_read =m_br.readLine(); } return m_outString.toString(); } catch (Exception p_ex) { p_ex.printStackTrace(); return null; } } }