こんにちは、私は最初のアンドロイドアプリを作成しています。私は、URLからJSONフィードを解析する最も効率的な方法を知りたいと思っています。それをどこかに保管しておけば、私はアプリの別の部分でそれを元に戻すことができます。私はどこにでも見てきたし、それを行うためのさまざまな方法を見つけたと私は行くために確信していません。あなたの意見では、効率的かつ簡単にJSONを構文解析する最良の方法は何ですか?Androidからparse jsonをURLから取り出して保存する
答えて
あなたの最善の策は、それは一般的に、それは必要はありません、すぐにADKに表示されるように設定されているが、シリアライズとJSONオブジェクトとPOJO、カスタマイズの間でデシリアライズするために、非常に速く、簡単な簡単ですおそらくGSON
です。それまでの間は、アプリにインポートできます。そこには他の図書館がありますが、これはアンドロイドとjsonの処理に新しい誰かのために、そして他の誰にとってもそのような点については、ほぼ確実に最善の場所です。
必要なときにデータをダウンロードする必要がないようにデータを保持したい場合は、GSONを使用してjsonを非直列化し(GSONを使用)、ORMLiteを使用してオブジェクトをsqliteデータベース。あるいは、jsonオブジェクトをファイル(おそらくcache directory)に保存してから、GSONをORMとして使用することもできます。
これはかなり簡単ですexampleデータを表示するためにlistviewを使用しています。私は非常に似たようなコードを使ってデータを表示しますが、私はカスタムアダプターを持っています。テキストとデータだけを使用している場合、正常に動作します。より堅牢なものをお望みなら、イメージのためにレイジーローダ/イメージマネージャを使うことができます。
私はこの1つのwhatsthebeefを使ってデータを取得し、ディスクにシリアル化します。
次のコードは、あなたがJSONObjectがシリアライズさがあり、ディスクに保存すると、あなたがいずれかでそれをバックロードすることができますJSONオブジェクトにあなたのJSONをつかんで解析し、第一段階を示しており、ディスク
// Create a new HTTP Client
DefaultHttpClient defaultClient = new DefaultHttpClient();
// Setup the get request
HttpGet httpGetRequest = new HttpGet("http://example.json");
// Execute the request in the client
HttpResponse httpResponse = defaultClient.execute(httpGetRequest);
// Grab the response
BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));
String json = reader.readLine();
// Instantiate a JSON object from the request response
JSONObject jsonObject = new JSONObject(json);
// Save the JSONOvject
ObjectOutput out = new ObjectOutputStream(new FileOutputStream(new File(getCacheDir(),"")+"cacheFile.srl"));
out.writeObject(jsonObject);
out.close();
に保存します
// Load in an object
ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File(new File(getCacheDir(),"")+"cacheFile.srl")));
JSONObject jsonObject = (JSONObject) in.readObject();
in.close();
out.writeObject(jsonObject.toString());を使用しました。とJSONObject jsonObject =新しいJSONObject((String)in.readObject()); Stringは直列化可能ですが、JSONObjectはそうでないためです。 – FR073N
JSONObjectは直列化できません。出力ストリームに使用すると、NotSerializableExceptionが発生します。有効なシリアライズ可能なオブジェクト(おそらくJSON文字列表現)を使用して回答を編集することを検討してください。 –
httpリクエストに時間がかかりますので、非同期タスクを使用することが最適です。それ以外の場合、メインスレッドはエラーをスローすることがあります。下に示すクラスは非同期にダウンロードできます
private class jsonLoad extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
@Override
protected void onPostExecute(String result) {
// Instantiate a JSON object from the request response
try {
JSONObject jsonObject = new JSONObject(result);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File file = new File(getApplicationContext().getFilesDir(),"nowList.cache");
try {
file.createNewFile();
FileOutputStream writer = openFileOutput(file.getName(), Context.MODE_PRIVATE);
writer.write(result);
writer.flush();
writer.close();
}
catch (IOException e) { e.printStackTrace(); return false; }
}
}
他の回答とは異なり、ダウンロードされたjson文字列自体はファイルに保存されています。だから、シリアル化が 今すぐURLからJSONをロードする必要はありませんが、これはファイルに内容を保存します
jsonLoad jtask=new jsonLoad();
jtask.doInBackground("http:www.json.com/urJsonFile.json");
を呼び出すことによって行うことができます。 保存されたjson文字列を開くには
File file = new File(getApplicationContext().getFilesDir(),"nowList.cache");
StringBuilder text = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
br.close();
}
catch (IOException e) {
//print log
}
JSONObject jsonObject = new JSONObject(text);
- 1. ParseファイルをURLから取得して解析ファイルとして保存
- 2. AmazonからASINを取り出してNetsuiteに保存する
- 3. AndroidアプリケーションのローカルデータベースのURLから画像を保存して取得する
- 4. FBアプリからデータを取り出してスプレッドシートに保存
- 5. JavaScriptでURLからJSONデータを取り出して使用する
- 6. v8からJSON :: Parseをなぜv8からNodeJS JSON :: parseよりもずっと遅くするのですか?
- 7. Android + Parse getからobjectIdを取得
- 8. JSONから「Player」「Stats」を取り出し
- 9. ファイルをURLから保存します。
- 10. データベースから値を取り出して別のデータベースに保存する
- 11. APIからデータを取り出してHDFSに保存する方法
- 12. ウェブサイトからデータを取り出して配列に保存する - iPhone SDK
- 13. ストリームをURLから保存する
- 14. jsonからオブジェクトキーを保存する
- 15. Android - Firebaseから取得したデータを保存する
- 16. Android - JSONとしてURLから画像を取得し、ギャラリービューで表示する
- 17. URLからJSONオブジェクトを取得する
- 18. SQL Serverデータベースから大量のデータを保存して取り出す
- 19. URLからjsonデータをコードバでデータベースに保存
- 20. jquery json parseから画像サイズを取得するには?
- 21. SWIFT 3 - JSON Web URLから取得した文字列からhtmlタグを取り出す
- 22. SWIFT 2.3 - JSON URLから取得した文字列からhtmlタグを取り出す
- 23. PHPのURLから変数を取得し、データベースに保存
- 24. php:POSTからjsonを受信してファイルに保存する
- 25. セクションリストのセクションデータの複数のURLからデータを取得して保存する
- 26. リンク(URL varriable)を使用してデータを取得してからデータベースに保存
- 27. JSONデータから情報を取得し、CSVファイルに保存
- 28. ul li divからデータを取得してjsonに保存する
- 29. kotlin Androidを使用してURLからJSONを読み取る方法は?
- 30. 保存したムービーデータをデータベースから取り出してユーザーに表示したいandroid
+1 GSONの場合。それが私が使うものです。 – Cody
範囲外ですが、GSONでは+1です。ヒント:-) – Pascal