2017-10-12 10 views
0

APIを使用して受け取ったデータを格納するのにHashMapを使用しました。その後、SharedPreferencesを使用して、受け取ったHashMapデータを格納しました。保管部分が完了しました。私はSharedPreferencesを使って保存したいレコードの数を見ることができます。ここハッシュマップデータの取得SharedPreferences

データを保存するためのコードである:上記の手順の後

if (result != null && result.length() > 0) 
{ 
    for (int j = 0; j < result.length(); j++) 
    { 
     JSONObject resultObj = result.getJSONObject(j); 
     String label_id = resultObj.getString("label_id"); 
     String arabic = resultObj.getString("arabic"); 
     String english = resultObj.getString("english"); 
     String key = resultObj.getString("key"); 

     //Create a new model and set the received value 
     LabelModel labelModel = new LabelModel(); 
     labelModel.setLabelId(label_id); 
     labelModel.setArabic(arabic); 
     labelModel.setEnglish(english); 
     labelModel.setKey(key); 

     int label = Integer.parseInt(label_id); 
     //Put the value 

     map.put(label, labelModel); 
    } 
} 

//With the below line, I stored the hashMap data using SharedPreferences 
Pref.setValue(mActivity, AppPrefrences.PREF_LABELS, map); 

、Iはを設定し、IはSharedPreferencesを使用してアプリケーションに格納されているSharePreferencesから値を取得のコードのセットを続い。私はSharedPreferencesに格納されたデータを取得しようとしています、今

public static String PREF_LABELS ="labels"; 

public static void setValue(@NonNull Context context, String key, Object obj) { 
    Pref.openPref(context); 
    Editor prefsPrivateEditor = Pref.sharedPreferences.edit(); 
    prefsPrivateEditor.putString(key, String.valueOf(obj)); 
    prefsPrivateEditor.commit(); 
    prefsPrivateEditor = null; 
    Pref.sharedPreferences = null; 
} 

@Nullable 
public static String getValue(@NonNull Context context, String key, Object obj) { 
    Pref.openPref(context); 
    String result = Pref.sharedPreferences.getString(key, String.valueOf(obj)); 
    Pref.sharedPreferences = null; 
    return result; 
} 

:そのために は、私がこれ以下のコードを使用していました。ここ は、私がデータを取得するために使用するコードです:私はアプリをデバッグするとき

String labels = Pref.getValue(mActivity, AppPrefrences.PREF_LABELS, ""); 

、私はラベルフォーマット以下の値を取得します。私が受け取ったのと同じ数のレコード。

形式は次のようになります:

{572=com.*****[email protected], 598=com.*****[email protected], 590=com.*****[email protected], 103=com.*****..........} 

は、どのように私はこのフォーマットからの各データを取得することができます

+0

店舗()のように優先して、それを保存するためにマップを変換! –

答えて

2

SharedPreferencesでHashMapはサポートされていませんにそれを書くためにObjectOutputStreamを使用することができます。したがって、HashMapを文字列に直接変換することで保存することはできませんが、JSON文字列に変換することはできます。この場合、google-gsonを使用できます。このような何か:

compile 'com.google.code.gson:gson:2.8.2' 

が好みにはHashMapオブジェクトから保存::

Editor prefsEditor = mPrefs.edit(); 
Gson gson = new Gson(); 
String json = gson.toJson(map); 
prefsEditor.putString("YourHashMap", json); 
prefsEditor.commit(); 

は好みからのHashMapオブジェクトを取得します。

Gson gson = new Gson(); 
String json = mPrefs.getString("YourHashMap", ""); 
HashMap map = gson.fromJson(json, HashMap.class); 
1

オブジェクトのデフォルトtoString()メソッドはhashcodeを使用しているため、{572=com.*****[email protected], 598=com.*****[email protected], 590=com.*****[email protected], 103=com.*****..........}が表示されます。

に複合オブジェクトを格納するSharedPreferenceは推奨されません。 SharedPreferenceは、ハッシュマップlinkをサポートしていません。

単純なオブジェクトを格納するには、オブジェクトを文字列に変換する必要があります。toString()メソッドを使用してください。 オブジェクトをStringに変換するのにGsonを使用すると簡単に解決できます。

また、内部メモリcheck this link

1

あなたがすべき

まず、依存関係を含めます文字列をハッシュマップオブジェクトにキャストするこれは1つの解決策です。より一般的なものにしたい場合は、StringUtilsライブラリを使用できます。例えば

String value = "{first_name = mohit,last_name = mathur,gender = male}"; 
value = value.substring(1, value.length()-1);   //remove curly brackets 
String[] keyValuePairs = value.split(",");    //split the string to creat key-value pairs 
Map<String,String> map = new HashMap<>();    

for(String pair : keyValuePairs)      //iterate over the pairs 
{ 
    String[] entry = pair.split("=");     //split the pairs to get key and value 
    map.put(entry[0].trim(), entry[1].trim());   //add them to the hashmap and trim whitespaces 
} 

、あなたは

value = StringUtils.substringBetween(value, "{", "}"); 

value = value.substring(1, value.length()-1); 

を切り替えることができ、その

した後は、

ようLabelModel に値をキャストする必要があります
0

SharedPreferenceはストアマップオブジェクトをサポートしていません。 https://developer.android.com/reference/android/content/SharedPreferences.Editor.html。だから、あなたのコードは単にデータobj.toStringを格納します、なぜあなたはデバッグで結果を見るのですか?マップを保存したい場合は、jsonとして保存してput文字列を使用できます。

1

代わりに文字列をgsonと文字列と解析がベストプラクティスであるとして取得するよりも、文字列として共有好みでresultObj.toStringこの

//convert to string using gson 
    Gson gson = new Gson(); 
    String mapString = gson.toJson(map); 

    //save this in the shared prefs 
    SharedPreferences prefs = getSharedPreferences("test", MODE_PRIVATE); 
    prefs.edit().putString("yourkey", mapString).apply(); 

    //get from shared prefs in gson and convert to maps again 
    String storedHashMapString = prefs.getString("yourkey",null); 
    java.lang.reflect.Type type = new TypeToken<HashMap<String, String>>(){}.getType(); 

     //Get the hashMap 
    HashMap<String, String> map = gson.fromJson(storedHashMapString, type); 
関連する問題