14

再起動すると、最後に保存されたハッシュマップの値が表示されるように、ハッシュマップを Android アプリケーションに保存したいと考えています。

HashMap<Integer,String> HtKpi=new HashMap<Integer,String>(); 

は私のハッシュマップであり、44 個の値が動的に格納されています。それはうまくいきます!!! 今、将来の使用(アプリケーションの再起動または再利用)のために保存したいと思います。

4

5 に答える 5

24

これをjsonにシリアル化し、結果の文字列を設定に保存できます。次に、アプリケーションが再起動したときに、設定から文字列を取得し、逆シリアル化します。

編集 :

これを行うには、たとえばGoogleGsonを使用できます。

マップをクラスでラップする必要があります。

public class MapWrapper {
  private HashMap<Integer, String> myMap;
  // getter and setter for 'myMap'
}

マップを保存するには:

Gson gson = new Gson();
MapWrapper wrapper = new MapWrapper();
wrapper.setMyMap(HtKpi);
String serializedMap = gson.toJson(wrapper);
// add 'serializedMap' to preferences

マップを取得するには:

String wrapperStr = preferences.getString(yourKey);
MapWrapper wrapper = gson.fromJson(wrapperStr, MapWrapper.class);
HashMap<Integer, String> HtKpi = wrapper.getMyMap(); 
于 2012-08-13T09:49:26.657 に答える
4

それをシリアル化し、共有設定またはファイルに保存します。もちろん、これを実行できるかどうかは、マップ元およびマップ先のデータ型によって異なります。(たとえば、ビューをシリアル化しようとすると、これは機能しません。)

例:

//persist
HashMap<String, Integer> counters; //the hashmap you want to save
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();    
for (String s : counters.keySet()) {
    editor.putInteger(s, counters.get(s));
}
editor.commit();


//load
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
HashMap<String, Integer> map= (HashMap<String, Integer>) pref.getAll();
for (String s : map.keySet()) {
        Integer value=map.get(s);
        //Use Value
}
于 2012-08-13T09:50:37.003 に答える
0

解決策があります。状態の名前をキーとして保存し、状態の略語を値として保存したいアプリケーションで行ったのと同じこと。そのために、「res/values/string.xml」で文字列配列を宣言しました。配列を宣言するために使用されるコードは次のとおりです。

 <string-array name="array_string">
    <item>yourKey1;yourValue1</item>
    <item>yourKey2;yourValue2</item>
    <item>yourKey3;yourValue3</item>
</string-array>

この後、ハッシュマップをインスタンス化する場所で、次のようにします。

HashMap<String, String> map = new HashMap<String, String>();
    Resources res = getResources();

    String[] stringArray = res.getStringArray(R.array.array_string);

    //R.array.array_string is the name of your array declared in string.xml
    if(stringArray == null || stringArray.length == 0) return;

    for(String string : stringArray) {
        String[] splittedString = string.split(";");
        if(splittedString.length > 0) {
            String key = splittedString[0];
            String value = splittedString[1];
            map.put(key, value);
        }
    }

これで HaspMap インスタンスを使用する準備が整いました。これは私が好むこれを行う簡単な方法です。

于 2012-08-13T10:06:13.277 に答える
0
   @Override
protected void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);
}

ここに保存できます.... このメソッドは、アクティビティが強制終了される前に呼び出されるため、将来アクティビティが戻ってきたときにその状態を復元できます。

そして、ここから回収できます、、、

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onRestoreInstanceState(savedInstanceState);
}

このメソッドは、アクティビティが以前に保存された状態から再初期化されているときに onStart() の後に呼び出されます。

これが役立つと思います

于 2012-08-13T09:53:14.223 に答える