1

私は、data.LACity.org が Socrata ソフトウェアを使用して公開しているオープン データ セットを使用しようとしています。

彼らには Java API がありますが、最初に、Udacity で何人かが学んだ「Sunshine」アプリのバリアントとして、URL を作成して送信しようとしました。

現在、実際に 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' AND zip_code = 90291

ここで問題があります。この URL 全体は、最終的な試みとして、断片から構築されたのではなく、完全な文字列としてハードワイヤードされています。Chrome にプラグインすると URL は機能しますが、アプリからは機能しません。

しかし、私のアプリからは、Sunshine サンプル アプリが構築し、Sunshine 実行の logcat からプラグインされた古い URL 文字列が、lacity URL の URL を置き換えるために使用されます。その呼び出しは機能し、JSON データを返します。

そのため、Android アプリから Socrata データの LACity URL を呼び出すと、何か問題が発生します。これを https と http の両方で試しましたが、どちらも失敗しました。しかし、サンプル アプリから天気図データを呼び出すと、同じコードが機能します。

以下に 2 つの URL を示します。

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, assessment&$where=issue_date >= '2015-02-27T00:00 :00' AND 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