2012-09-06 8 views
5

私は、次の共通のフォーマットを持っているJSONファイルにActivityまたはFragmentの現在の状態をエクスポートすることができAndroidアプリ書いている:のAndroid/Javaの一般的なJSONのインポート・インターフェース

{ 
    "data": { 
    "result": { 
     <content depends on specific class> 
    }, 
    "input": { 
     <content depends on specific class> 
    } 
    }, 
    "identifier": <identifier depends on specific class>, 
    "version": 1 
} 

をこれは、書き出し可能な機能を持つActivities/Fragmentsが、「エクスポート可能」と呼ばれるインターフェイスを実装しており、全体のエクスポート関数がインターフェイスで定義されているメソッドを呼び出すことを意味します。これは非常にうまくいく、邪魔な解決策です。

これまでのところとても良いです。今私は逆方向にしたい。ファイルをロードし、識別子の内容に応じて対応するActivity/Fragmentを呼び出したいとします。

"入力"と "結果"の内容を読むことは、Activity/Fragmentの方法で行わなければなりません。

この問題をうまく解決する方法は、残念ながらわかりません。 これを行う最善の方法は何ですか?解決策は、容易に拡張できるようにできるだけ抽象的でなければならない。

+0

['SharedPreferences'](http://developer.android.com/guide/topics/data/data-storage.html#pref)を使用して' Activity'状態を保存して復元する方法は何ですか?これは、アプリケーション/デバイスの再起動後も存続します。短期間の状態(デバイスのローテーション、バックグラウンド)を維持したいだけなら、組み込みの['savedInstanceState''Bundle'システム(http://developer.android.com/training/basics/activity-ライフサイクル/ recreating.html)。 –

答えて

0

これには非常に多くの異なる回答があります。 GoogleにはJSONデータをJavaクラスとの間で自動的に読み書きできるGSONというライブラリがあります。ライブラリを使用したくない場合は、Javaリフレクションを使用できます。

0

JSONObject js = new JSONObject( "data");

JSONObject jSObject1 = js.getJSONObject( "result"); JSONObject jSObject2 = js.getJSONObject( "input"); そうであれば、他の に私はあなたの問題

0

アンを理解してほしいが、最も簡単な解決策になるが、それはあなたのために十分な抽象的でない場合、Abstract Factory patternを使用しています。

Exportableを作成する方法を定義するExportableFactoryインターフェイスを作成し、ActivityおよびFragmentのこのインターフェイスの実装を作成します。次に、identifierの可能な値を正しい工場にマップする​​を作成します。次に呼び出し:

Exportable exportable = factoryMap.get(identifier).createExportable(data); 

そのように、あなたはExportableの第三の実装を追加したい場合は、あなただけExportableFactoryの対応する実装を作成し、呼び出し元の関数を変更することなく、マップに追加する必要があります。

関連する問題