X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fuk%2Fme%2Fnjae%2Fsunshine%2FFetchWeatherTask.java;h=43747fdd02f24f8166c3525e20b0f57d12d7b542;hb=cffe4d29f34f7c0ef8b12d99591b684b7c893779;hp=44506c674ed2fbcef12e0647bee05c23c90e3fac;hpb=10265f8b4d2e1cb0f74f50ac7700aacad6bd2255;p=Sunshine.git diff --git a/app/src/main/java/uk/me/njae/sunshine/FetchWeatherTask.java b/app/src/main/java/uk/me/njae/sunshine/FetchWeatherTask.java index 44506c6..43747fd 100644 --- a/app/src/main/java/uk/me/njae/sunshine/FetchWeatherTask.java +++ b/app/src/main/java/uk/me/njae/sunshine/FetchWeatherTask.java @@ -3,14 +3,10 @@ package uk.me.njae.sunshine; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; -import android.content.SharedPreferences; import android.database.Cursor; -import android.database.DatabaseUtils; import android.net.Uri; import android.os.AsyncTask; -import android.preference.PreferenceManager; import android.util.Log; -import android.widget.ArrayAdapter; import org.json.JSONArray; import org.json.JSONException; @@ -22,7 +18,6 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; -import java.text.SimpleDateFormat; import java.util.Date; import java.util.Vector; @@ -35,59 +30,14 @@ import uk.me.njae.sunshine.data.WeatherContract.WeatherEntry; */ -public class FetchWeatherTask extends AsyncTask { +public class FetchWeatherTask extends AsyncTask { private final String LOG_TAG = FetchWeatherTask.class.getSimpleName(); - private ArrayAdapter mForecastAdapter; private final Context mContext; - public FetchWeatherTask(Context context, ArrayAdapter forecastAdapter) { + public FetchWeatherTask(Context context) { mContext = context; - mForecastAdapter = forecastAdapter; - } - - private boolean DEBUG = true; - - /* The date/time conversion code is going to be moved outside the asynctask later, - * so for convenience we're breaking it out into its own method now. - */ - private String getReadableDateString(long time) { - // Because the API returns a unix timestamp (measured in seconds), - // it must be converted to milliseconds in order to be converted to valid date. - Date date = new Date(time * 1000); - SimpleDateFormat format = new SimpleDateFormat("E, MMM d"); - return format.format(date).toString(); - } - - /** - * Prepare the weather high/lows for presentation. - */ - private String formatHighLows(double high, double low) { - // Data is fetched in Celsius by default. - // If user prefers to see in Fahrenheit, convert the values here. - // We do this rather than fetching in Fahrenheit so that the user can - // change this option without us having to re-fetch the data once - // we start storing the values in a database. - SharedPreferences sharedPrefs = - PreferenceManager.getDefaultSharedPreferences(mContext); - String unitType = sharedPrefs.getString( - mContext.getString(R.string.pref_units_key), - mContext.getString(R.string.pref_units_metric)); - - if (unitType.equals(mContext.getString(R.string.pref_units_imperial))) { - high = (high * 1.8) + 32; - low = (low * 1.8) + 32; - } else if (!unitType.equals(mContext.getString(R.string.pref_units_metric))) { - Log.d(LOG_TAG, "Unit type not found: " + unitType); - } - - // For presentation, assume the user doesn't care about tenths of a degree. - long roundedHigh = Math.round(high); - long roundedLow = Math.round(low); - - String highLowStr = roundedHigh + "/" + roundedLow; - return highLowStr; } /** @@ -101,7 +51,7 @@ public class FetchWeatherTask extends AsyncTask { */ private long addLocation(String locationSetting, String cityName, double lat, double lon) { - Log.v(LOG_TAG, "inserting " + cityName + ", with coord: " + lat + ", " + lon); + // Log.v(LOG_TAG, "inserting " + cityName + ", with coord: " + lat + ", " + lon); // First, check if the location with this city name exists in the db Cursor cursor = mContext.getContentResolver().query( @@ -112,11 +62,11 @@ public class FetchWeatherTask extends AsyncTask { null); if (cursor.moveToFirst()) { - Log.v(LOG_TAG, "Found it in the database!"); + // Log.v(LOG_TAG, "Found it in the database!"); int locationIdIndex = cursor.getColumnIndex(LocationEntry._ID); return cursor.getLong(locationIdIndex); } else { - Log.v(LOG_TAG, "Didn't find it in the database, inserting now!"); +// Log.v(LOG_TAG, "Didn't find it in the database, inserting now!"); ContentValues locationValues = new ContentValues(); locationValues.put(LocationEntry.COLUMN_LOCATION_SETTING, locationSetting); locationValues.put(LocationEntry.COLUMN_CITY_NAME, cityName); @@ -137,7 +87,7 @@ public class FetchWeatherTask extends AsyncTask { * Fortunately parsing is easy: constructor takes the JSON string and converts it * into an Object hierarchy for us. */ - private String[] getWeatherDataFromJson(String forecastJsonStr, int numDays, + private void getWeatherDataFromJson(String forecastJsonStr, int numDays, String locationSetting) throws JSONException { @@ -177,7 +127,7 @@ public class FetchWeatherTask extends AsyncTask { double cityLatitude = coordJSON.getLong(OWM_COORD_LAT); double cityLongitude = coordJSON.getLong(OWM_COORD_LONG); - Log.v(LOG_TAG, cityName + ", with coord: " + cityLatitude + " " + cityLongitude); +// Log.v(LOG_TAG, cityName + ", with coord: " + cityLatitude + " " + cityLongitude); // Insert the location into the database. long locationID = addLocation(locationSetting, cityName, cityLatitude, cityLongitude); @@ -185,7 +135,7 @@ public class FetchWeatherTask extends AsyncTask { // Get and insert the new weather information into the database Vector cVVector = new Vector(weatherArray.length()); - String[] resultStrs = new String[numDays]; +// String[] resultStrs = new String[numDays]; for (int i = 0; i < weatherArray.length(); i++) { // These are the values that will be collected. @@ -242,46 +192,16 @@ public class FetchWeatherTask extends AsyncTask { weatherValues.put(WeatherEntry.COLUMN_WEATHER_ID, weatherId); cVVector.add(weatherValues); - - String highAndLow = formatHighLows(high, low); - String day = getReadableDateString(dateTime); - resultStrs[i] = day + " - " + description + " - " + highAndLow; } if (cVVector.size() > 0) { ContentValues[] cvArray = new ContentValues[cVVector.size()]; cVVector.toArray(cvArray); - int rowsInserted = mContext.getContentResolver() - .bulkInsert(WeatherEntry.CONTENT_URI, cvArray); - Log.v(LOG_TAG, "inserted " + rowsInserted + " rows of weather data"); - // Use a DEBUG variable to gate whether or not you do this, so you can easily - // turn it on and off, and so that it's easy to see what you can rip out if - // you ever want to remove it. - if (DEBUG) { - Cursor weatherCursor = mContext.getContentResolver().query( - WeatherEntry.CONTENT_URI, - null, - null, - null, - null - ); - - if (weatherCursor.moveToFirst()) { - ContentValues resultValues = new ContentValues(); - DatabaseUtils.cursorRowToContentValues(weatherCursor, resultValues); - Log.v(LOG_TAG, "Query succeeded! **********"); - for (String key : resultValues.keySet()) { - Log.v(LOG_TAG, key + ": " + resultValues.getAsString(key)); - } - } else { - Log.v(LOG_TAG, "Query failed! :( **********"); - } - } + mContext.getContentResolver().bulkInsert(WeatherEntry.CONTENT_URI, cvArray); } - return resultStrs; } @Override - protected String[] doInBackground(String... params) { + protected Void doInBackground(String... params) { // If there's no zip code, there's nothing to look up. Verify size of params. if (params.length == 0) { @@ -367,7 +287,7 @@ public class FetchWeatherTask extends AsyncTask { } try { - return getWeatherDataFromJson(forecastJsonStr, numDays, locationQuery); + getWeatherDataFromJson(forecastJsonStr, numDays, locationQuery); } catch (JSONException e) { Log.e(LOG_TAG, e.getMessage(), e); e.printStackTrace(); @@ -376,15 +296,4 @@ public class FetchWeatherTask extends AsyncTask { return null; } - @Override - protected void onPostExecute(String[] result) { - if (result != null) { - mForecastAdapter.clear(); - for (String dayForecastStr : result) { - mForecastAdapter.add(dayForecastStr); - } - // New data is back from the server. Hooray! - } - } - } \ No newline at end of file