私は、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);
}
}