1

I'm trying to use the open data sets that data.LACity.org publishes using Socrata software.

They have a Java API for it, but first I tried to just build and send a URL, as a variant on the 'Sunshine' app several people have learned from on Udacity.

Now I'm actually building a URL, and then sending it out, but then I get a FileNotFoundException, as follows:

java.io.FileNotFoundException: http://data.lacity.org/resource/yv23-pmwf.json?$select=zip_code, issue_date, address_start, address_end, street_name, street_suffix, work_description, valuation&$where=issue_date >= '2015-02-27T00:00:00' AND zip_code = 90291

Here's the pisser: That whole URL is, as a final attempt, hardwired as a complete string, not built from pieces. The URL works if I plug it into Chrome, but not from my app.

But from my app, the old URL string that the Sunshine sample app builds, plugged in from logcat from a Sunshine run, to replace the URL on the lacity URL, well, that call works, and returns the JSON data.

So I'm doing something wrong when I call the LACity URL for Socrata data from my Android app. I've tried this both as https and http, and both failed. But the same code works when I call the weathermap data from the sample app.

Here are the two URLs:

http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7 <<< this works, both in Chrome and from Android

https://data.lacity.org/resource/yv23-pmwf.json?$select=zip_code, issue_date, address_start, address_end, street_name, street_suffix, work_description, valuation&$where=issue_date >= '2015-02-27T00:00:00' AND zip_code = 90291

This works in Chrome but not from Android.

Any suggestions would be appreciated. I'm going to try again to make heads or tails of the Socrata Soda2 Java API (and why, in this case, it might be necessary.) Thanks -k-

The immediate code fragment (pardon my newness to Android/Java):

            final String PERMIT_BASE_URL = "one of the url strings above";

            Uri builtUri = Uri.parse(PERMIT_BASE_URL).buildUpon()
                    .build();

            URL url = new URL(builtUri.toString());
            Log.v(LOG_TAG, "Build URL: " + url.toString());

            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();

            InputStream inputStream = urlConnection.getInputStream();
            StringBuffer buffer = new StringBuffer();
            if (inputStream == null) {
                return null; 
            }
            reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            while ((line = reader.readLine()) != null) {
                //simplify debugging
                buffer.append(line + "\n");
            }

            if (buffer.length() == 0) {
                return null; 
            }
            permitJsonStr = buffer.toString();

            Log.v(LOG_TAG, "Permit JSON string: " + permitJsonStr); 


        } catch (IOException e) {
            Log.e(LOG_TAG, "Error on Xoom", e);
            // Nothing to parse.
            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 on Xoom", e);
                }
            }
kzoom
  • 241
  • 1
  • 2
  • 12

1 Answers1

1

Figured this out from the way this page highlighted the URLs in my question.

Spaces.

The call out of Android seems to cough because of the spaces in the URL string. I closed them all up, but then the 'AND' caused issues. Replaced it with &, now it works, hardwired. I'll work on constructing it from input parameters, as intended, but I think this is OK.

As Emily Litella would say...

kzoom
  • 241
  • 1
  • 2
  • 12