2010-11-29 20 views
4

JSONフィードを表す大きな文字列があります。私のアプリケーションは、リモートWebサービスからこのフィードをダウンロードします。JSONオブジェクトを処理する最善の方法は何ですか?

質問:

1)私は、私はそれを格納する必要がありJSONフィードを、ダウンロードしたら?今私はアプリの設定でそれを格納しているとうまく動作します。私はそれをしない理由がある場合、または内部ストレージまたは他の何かのような、より良い/より高速なオプションがある場合にだけ興味がありますか?

JSONObject jsonObj = new JSONObject(json_string); 
JSONArray jsonArr = jsonObj.getJSONArray("root"); 
for (int m = 0; m < jsonArr.length(); m++) { 
    .... 
} 

問題があり、JSONフィードを解析し、最初の行は一種の高価です:

2)私は私の活動で、このフィードからのデータを表示しようと思い、私はこのような何かを行います。私の現在のサイズのフィード(それは将来的に成長するかもしれません)では、完了までにはおそらく0.5秒かかりますが、それでも問題はありません。たとえば、(データを表示するために)アクティビティを呼び出すためにボタンをクリックします。この1/2秒のポーズは目立つものではありません。

この一時停止を避けるには、フィードをダウンロードした直後にJSONを解析する必要があります。それでは、問題は、JSONオブジェクトをどこで解析するのですか?

i)プリミティブデータのみがそこに保存されるため、JSONオブジェクトをプリファレンスに保存できません。

ii)私のアプリケーションが起動するたびに構文解析を行い、私のすべての活動からそれらにアクセスできるように、解析されたJSONオブジェクト(それ以上のもの)をグローバル(アプリケーションレベルで)にする必要がありますか?

iii)3番目のオプションは、他のアクティビティから簡単にアクセスできるようにJSON objestsを静的と宣言することだと思いますか?

これを行うにはどのような方法が最適ですか?

THX。

答えて

1

保存する必要はありますか?ウェブページから一度ダウンロードして、それだけで必要なものがあれば、それを共有プリファレンスに保存しても問題ありません。あなたはそれをたくさん取得する必要がある場合は、なぜそれを格納する?

+0

私のアプリが起動するたびにロードしたくないので、私はそれを保存する必要があります。私が言ったように私はそれをストリングとして保管しています。 JSONオブジェクトをJSON文字列の解析に費やさないように、JSONオブジェクトとして格納できるようにしたいと考えています。 – bobetko

+0

JSONオブジェクトをそのまま保存することはできません(私は自分のアクティビティから呼び出すことができます)、JSONオブジェクトをすべてのアプリケーションで利用できるようにする最良の方法は何ですか? – bobetko

+0

jsonオブジェクトの解析に要する時間は簡単です。それをオブジェクトとして保存できるとはどのように思いますか?それはシリアル化されなければならない。 jsonへのシリアライズは完全に有効です。 – Falmarri

1

SQLiteデータベースを使用してJSONから取り出した値を保存する必要があるようです。これにより、開始に役立ちます。http://developer.android.com/guide/topics/data/data-storage.html#db

アプリケーション内のすべてのアクティビティが、データをデータベースに問い合せることができます。 ListViewを使用して情報を表示している場合は、CursorAdapterを使用して簡単にリストに入力できます。速度が本当に問題になる場合

あなたも大幅に使用することですJSONデータを解析する(だけでなく、外の書き込み)スピードアップするために、他のアプリケーション

+1

Thanks Elevineをご覧ください。以前の私のアプリケーションでは、私はこのアプローチを使用しました。私はフィードを解析し、それらをSQliteデータベースに格納し、DBデータを使用してコントロールを作成します。それは余分な作業でしたが、すべてがスムーズに実行されていました。私の友人、iPhoneのプログラマーと話した後、彼はこのdbレイヤーは必要ではなく、私はフィードを使って直接作業できると教えてくれました。そこで、私は次のプロジェクトで試してみることにしました。 – bobetko

+1

データを永続化する必要がない場合は、おそらくデータベースアプローチをとる必要はありません。 – elevine

3

とこの情報を共有するための簡単な方法をContent Providerを作成することができますJSONデータを解析するためのJackson org.jsonライブラリ(Android SDKに同梱)と比較して、地図やリストを解析したい場合は、少なくとも3〜5倍高速です(http://www.cowtowncoder.com/blog/archives/2009/02/ entry_204.html)。 しかし、それをJavaオブジェクトにバインドすることができれば、それはより速く、より少ないメモリも使用します。

JSONデータを保存する場合、通常はファイルとして、またはデータベース内のBLOBとしてシリアル化されます。あなたが本当にしなければ、JSONデータから作成されたJavaオブジェクトを保持するほうがよいでしょう。

+0

ありがとうございます。したがって、JSONオブジェクトをシリアライズしてデータをファイルに保存し、後でそれを読み込んでデシリアライズする必要がある場合は、プリファレンス(jsonフィード)から文字列を取得し、JSONObjectを実行すると思うかjsonObj =新しいJSONObject(json_string)ですか? – bobetko

+0

私はPreferencesインターフェイスに慣れていません。私が言っていることは、JSONObjectが使用するパーサーが遅く、より高速な選択肢があることです。これは、JSONがどのように格納されているかに関係なく(ストレージ上のバイト、String、ネットワーク経由での読み込み)。 – StaxMan

関連する問題