public void updateFinished(OpenweathermapObject data) { String errorMessage = getString(R.string.txt_unknown_error); if (data != null) { errorMessage = data.getErrorMessage(); } if (errorMessage.isEmpty()) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); Boolean del_old = preferences.getBoolean( getString(R.string.settings_delete_old_data_key), getResources().getBoolean(R.bool.settings_delete_old_data_default)); Realm realm = null; try { realm = Realm.getDefaultInstance(); realm.beginTransaction(); if (del_old) { Long timeStamp = data.getWeatherForecastList().get(0).getTimeStamp(); RealmResults<ForecastListItem> result = realm.where(ForecastListItem.class).lessThan("timeStamp", timeStamp).findAll(); result.clear(); } realm.copyToRealmOrUpdate(data.getWeatherForecastList()); realm.commitTransaction(); SharedPreferences.Editor editor = preferences.edit(); editor.putLong(getString(R.string.last_update_key), System.currentTimeMillis()); String city = data.getCityName().concat(", ".concat(data.getCountry())); editor.putString(getString(R.string.current_city_key), city); editor.commit(); } finally { if (realm != null) { realm.close(); } } } Intent intent = new Intent(BROADCAST_ACTION); intent.putExtra(PARAM_STATUS, STATUS_FINISH); intent.putExtra(PARAM_RESULT, errorMessage); sendBroadcast(intent); }
private void updateWeatherForecast(String aCity, String apiId, String aUnits, String language) { updateProgress(0); OpenweathermapObject openweathermapResult = null; String city = aCity; if (city.matches("\\d*")) { city = "cityId=".concat(city); } else { city = "q=".concat(city); } String apiKey = API_KEY.concat(apiId); String units = aUnits; if (!units.isEmpty()) { units = UNITS_KEY.concat(units); } String lang = language; if (!lang.isEmpty()) { lang = LANG_KEY.concat(lang); } String url = BASE_URL.concat(city.concat(apiKey).concat(units.concat(lang))); try { HttpURLConnection connection = (HttpURLConnection) new java.net.URL(url).openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(10000); connection.connect(); InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream()); updateProgress(10); Gson gson = new GsonBuilder() .setExclusionStrategies( new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes f) { return f.getDeclaringClass().equals(RealmObject.class); } @Override public boolean shouldSkipClass(Class<?> clazz) { return false; } }) .create(); openweathermapResult = gson.fromJson(inputStreamReader, OpenweathermapObject.class); connection.disconnect(); connection = null; updateProgress(50); for (final ForecastListItem item : openweathermapResult.getWeatherForecastList()) { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); String iconName = item.getWeather().get(0).getIconName(); String iconUrl = IMG_URL.concat(iconName.concat(IMG_EXT)); try { InputStream inputStream = new java.net.URL(iconUrl).openStream(); byte[] data = new byte[1024]; int count; while ((count = inputStream.read(data, 0, data.length)) != -1) { buffer.write(data, 0, count); } buffer.flush(); } catch (IOException e) { e.printStackTrace(); } item.getWeather().get(0).setIconData(buffer.toByteArray()); } updateProgress(99); openweathermapResult.setErrorMessage(""); } catch (IOException e) { if (openweathermapResult != null) { openweathermapResult.setErrorMessage(e.getMessage()); } e.printStackTrace(); } updateProgress(100); updateFinished(openweathermapResult); }