Android Open Source - Weather-app Weather Json Parser






From Project

Back to project page Weather-app.

License

The source code is released under:

Apache License

If you think the Android project Weather-app listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package app.sunshine.juanjo.util;
//from w  w  w .  ja va2  s. c  om
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by juanjo on 10/08/14.
 */
public class WeatherJsonParser {

  final String OWM_LIST = "list";
  final String OWM_WEATHER = "weather";
  final String OWM_TEMPERATURE = "temp";
  final String OWM_MAX = "max";
  final String OWM_MIN = "min";
  final String OWM_DATETIME = "dt";
  final String OWM_DESCRIPTION = "main";

  public String[] getWeatherDataFromJson(String forecastJsonStr, int numDays)
      throws JSONException {
    String[] resultStrs = new String[numDays];

    // These are the names of the JSON objects that need to be extracted.
    final String OWM_LIST = "list";
    final String OWM_WEATHER = "weather";
    final String OWM_TEMPERATURE = "temp";
    final String OWM_MAX = "max";
    final String OWM_MIN = "min";
    final String OWM_DATETIME = "dt";
    final String OWM_DESCRIPTION = "main";

    JSONObject forecastJson = new JSONObject(forecastJsonStr);
    JSONArray weatherArray = forecastJson.getJSONArray(OWM_LIST);

    for (int i = 0; i < weatherArray.length(); i++) {
      // For now, using the format "Day, description, hi/low"
      String day;
      String description;
      String highAndLow;

      // Get the JSON object representing the day
      JSONObject dayForecast = weatherArray.getJSONObject(i);

      // The date/time is returned as a long. We need to convert that
      // into something human-readable, since most people won't read
      // "1400356800" as
      // "this saturday".
      long dateTime = dayForecast.getLong(OWM_DATETIME);
      day = getReadableDateString(dateTime);

      // description is in a child array called "weather", which is 1
      // element long.
      JSONObject weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
      description = weatherObject.getString(OWM_DESCRIPTION);

      // Temperatures are in a child object called "temp". Try not to name
      // variables
      // "temp" when working with temperature. It confuses everybody.
      JSONObject temperatureObject = dayForecast.getJSONObject(OWM_TEMPERATURE);
      double high = temperatureObject.getDouble(OWM_MAX);
      double low = temperatureObject.getDouble(OWM_MIN);

      highAndLow = formatHighLows(high, low);
      resultStrs[i] = day + " - " + description + " - " + highAndLow;
    }

    for (String s : resultStrs) {
      Log.v("WEATHER", "Forecast entry: " + s);
    }
    return resultStrs;
  }

  /*
   * 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) {
    // 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;
  }
}




Java Source Code List

app.sunshine.juanjo.gcm.GcmBroadcastReceiver.java
app.sunshine.juanjo.gcm.GcmIntentService.java
app.sunshine.juanjo.network.APIHTTP.java
app.sunshine.juanjo.network.HttpRequest.java
app.sunshine.juanjo.network.SendIdGCM.java
app.sunshine.juanjo.sync.SunshineAuthenticatorService.java
app.sunshine.juanjo.sync.SunshineAuthenticator.java
app.sunshine.juanjo.sync.SunshineSyncAdapter.java
app.sunshine.juanjo.sync.SunshineSyncService.java
app.sunshine.juanjo.util.Utility.java
app.sunshine.juanjo.util.WeatherContract.java
app.sunshine.juanjo.util.WeatherDbHelper.java
app.sunshine.juanjo.util.WeatherJsonParser.java
app.sunshine.juanjo.util.WeatherProvider.java
app.sunshine.juanjo.views.MyView.java
app.sunshine.juanjo.views.activities.DetailActivity.java
app.sunshine.juanjo.views.activities.MainActivity.java
app.sunshine.juanjo.views.activities.SettingsActivity.java
app.sunshine.juanjo.views.adapter.ForecastAdapter.java
app.sunshine.juanjo.views.fragments.DetailFragment.java
app.sunshine.juanjo.views.fragments.ForeCastFragment.java