1

我正在尝试使用 data.LACity.org 使用 Socrata 软件发布的开放数据集。

他们有一个 Java API,但首先我尝试构建和发送一个 URL,作为“阳光”应用程序的一个变体,几个人从 Udacity 上学到了。

现在我实际上是在构建一个 URL,然后将其发送出去,但随后我得到一个 FileNotFoundException,如下所示:

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' 和 zip_code = 90291

问题来了:作为最后的尝试,整个 URL 被硬连线为一个完整的字符串,而不是由碎片组成。如果我将 URL 插入 Chrome 中,则该 URL 有效,但不是来自我的应用程序。

但是在我的应用程序中,Sunshine 示例应用程序构建的旧 URL 字符串从 Sunshine 运行的 logcat 中插入,以替换 lacity URL 上的 URL,嗯,该调用有效,并返回 JSON 数据。

因此,当我从我的 Android 应用程序调用 Socrata 数据的 LACity URL 时,我做错了。我已经尝试过 https 和 http ,但都失败了。但是当我从示例应用程序中调用天气图数据时,相同的代码可以工作。

以下是两个网址:

http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7 <<< 这在 Chrome 和 Android 中都有效

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

这适用于 Chrome,但不适用于Android。

任何建议,将不胜感激。我将再次尝试制作 Socrata Soda2 Java API 的正面或反面(以及为什么在这种情况下可能有必要。)谢谢 -k-

直接的代码片段(请原谅我对 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);
                }
            }
4

1 回答 1

1

从这个页面突出显示我的问题中的 URL 的方式中发现了这一点。

空间。

由于 URL 字符串中的空格,Android 的调用似乎咳嗽。我将它们全部关闭,但随后“和”引起了问题。用 & 代替它,现在它可以工作了,硬连线。我将按照预期从输入参数构建它,但我认为这没关系。

正如艾米丽·利泰拉所说……

于 2015-03-04T23:34:14.810 回答