Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 102
1

SharedPreferences, HashMap

20.11.2015, 17:03. Показов 1761. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу сделать Save , Load в sharedPreferences и вывести результат в Log.
не вижу ошибки
Спасибо.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Map<String, String> map = new HashMap<String, String>();
        map.put("k1", "v1");
        map.put("k2", "v2");
        map.put("k2", "v2");
 
//записываю
        saveMap(map);
 
//загружаю
        Map<String, String> map_2 = loadMap();
 
//////вывожу результат 
        Set<Map.Entry<String, String>> set = map_2.entrySet();
        for (Map.Entry<String, String> me : set) {
            Log.d("MYLOG", "key: " + String.valueOf(me.getKey()) + ",value: " + String.valueOf(me.getValue()));
        }
    }
 
    protected void saveMap(Map<String, String> inputMap) {
        Log.d("MYLOG", "saveMap");
        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
        if (sharedPreferences != null) {
            Log.d("MYLOG", "saveMap = SP != null");
            JSONObject jsonObject = new JSONObject(inputMap);
            String jsonString = jsonObject.toString();
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.remove("MyMap").apply();
            editor.putString("MyMap", jsonString);
            editor.apply();
        }
    }
 
    protected Map<String, String> loadMap() {
        Log.d("MYLOG", "loadMap");
        Map<String, String> outputMap = new HashMap<String, String>();
        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
        try {
            if (sharedPreferences != null) {
                Log.d("MYLOG", "loadMap = SP != null");
                String jsonString = sharedPreferences.getString("My_map", (new JSONObject()).toString());
                JSONObject jsonObject = new JSONObject(jsonString);
                Iterator<String> keyIterator = jsonObject.keys();
                while (keyIterator.hasNext()) {
                    String key = keyIterator.next();
                    String value = (String) jsonObject.get(key);
                    outputMap.put(key, value);
                    Log.d("MYLOG", "saveMap = while" + key + "/" + value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return outputMap;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2015, 17:03
Ответы с готовыми решениями:

SharedPreferences
Доброй ночи. Вышла заминка с бд класса SharedPreferences. Вообщем вот код: import...

SharedPreferences
String PR = &quot;key&quot;; SharedPreferences mySharedPreferences = getSharedPreferences(PR,...

SharedPreferences
Можно как-то сохранить SharedPreferences файл после перезагрузки девайса? P.S. как хранятся...

SharedPreferences
Возникла проблема при сохранении переменных в SharedPreferences в AndroidStudio. У меня есть два...

5
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
20.11.2015, 18:58 2
Василевский, как-то так

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 public static final String MAP_SP_KEY = "map";
    public static final String KEY_VALUE_DELIMITER = ";";
    private SharedPreferences preferences;
 
    private SharedPreferences getSharedPreferences() {
        if (preferences == null) preferences = getApplicationContext().getSharedPreferences("MyVariables", MODE_PRIVATE);
        return preferences;
    }
 
    private void saveMap(Map<String, String> map) {
        StringBuilder sb = new StringBuilder();
        for (String key : map.keySet()) {
            sb.append(key).append(KEY_VALUE_DELIMITER).append(map.get(key)).append(KEY_VALUE_DELIMITER);
        }
        getSharedPreferences().edit().putString(MAP_SP_KEY, sb.toString());
    }
    
    private Map<String, String> getMap() {
        Map<String, String> map = new HashMap<>();
        String string = getSharedPreferences().getString(MAP_SP_KEY, "");
        if (!string.isEmpty()) {
            String[] split = string.split(KEY_VALUE_DELIMITER);
            if (split.length > 1) {
                for (int i = 0; i < split.length - 2; i = i + 2) {
                    map.put(split[i], split[i + 1]);
                }
            }
        }
        return map;
    }
Только я не проверял

Добавлено через 9 минут
Цитата Сообщение от YuraAAA Посмотреть сообщение
getSharedPreferences().edit().putString(MAP_SP_KEY, sb.toString());
и apply() в конце, забыл
0
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 102
21.11.2015, 05:57  [ТС] 3
YuraAAA, УХ ТЫ даже так.
Но не работает )
может я как-то не так вызывают метод GetMap .....В Log тишина короче )
помогите пожалуйста разобраться , не первые сутки сижу с этим SharedPreferences
0
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
21.11.2015, 08:27 4
давайте разобьем задачу на части. вот пара методов.
Java
1
2
3
4
5
6
7
8
9
10
11
12
    public void savePref(String key, int val) {
        sPref = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor ed = sPref.edit();
        ed.putInt(key, val);
        ed.commit();
    }
 
    public int loadPref(String key, int defVal) {
        sPref = getPreferences(MODE_PRIVATE);
        int savedInt = sPref.getInt(key, defVal);
        return savedInt;
    }
1) закиньте к себе в активити, вызовите, сохраните и получите. если все работает - 2) исправте на строку и проверьте работоспособность.

если ЭТО не работает - тогда надо разбираться что вообще не слава богу с вашей прогой.
если это работает, то 3) соберите в отдельном методе map в json, и получите строку. глазами посмотрите, что это за строка. если это таки строка - скормите в 2.
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
21.11.2015, 11:50 5
Василевский, исправил,
Цитата Сообщение от YuraAAA Посмотреть сообщение
i < split.length - 2
тут конечно же -1.
Вот рабочий код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static final String MAP_SP_KEY = "map";
    public static final String KEY_VALUE_DELIMITER = ";";
    private SharedPreferences preferences;
 
    private SharedPreferences getSharedPreferences() {
        if (preferences == null) preferences = getApplicationContext().getSharedPreferences("MyVariables", MODE_PRIVATE);
        return preferences;
    }
 
    private void saveMap(Map<String, String> map) {
        StringBuilder sb = new StringBuilder();
        for (String key : map.keySet()) {
            sb.append(key).append(KEY_VALUE_DELIMITER).append(map.get(key)).append(KEY_VALUE_DELIMITER);
        }
        getSharedPreferences().edit().putString(MAP_SP_KEY, sb.toString()).apply();
    }
 
    private Map<String, String> getMap() {
        Map<String, String> map = new HashMap<>();
        String string = getSharedPreferences().getString(MAP_SP_KEY, "");
        if (!string.isEmpty()) {
            String[] split = string.split(KEY_VALUE_DELIMITER);
            if (split.length > 1) {
                for (int i = 0; i < split.length - 1; i = i + 2) {
                    map.put(split[i], split[i + 1]);
                }
            }
        }
        return map;
    }
Вот так проверил:

Java
1
2
3
4
5
6
7
Map<String, String> map = new HashMap<String, String>() {{
            put("Key", "Value");
            put("Key2", "Value");
        }};
saveMap(map);
Map<String, String> stringStringMap = getMap();
Log.d("MAP", stringStringMap.toString());

Вот вывод в логах:
D/MAP: {Key=Value, Key2=Value}
0
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 102
21.11.2015, 17:46  [ТС] 6
YuraAAA,
Спасибо ,что так все расписали ...но я бы строкам хотел пройтись, если вы кончено не против )
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        savePref("Key1", 1);//заносим данные в savePref
    }
 
    public void savePref(String key, int val) {
        Log.d("MYLOG", "savePref");
        Log.d("MYLOG", "Key =  " + key + ", Val  " + val);
        sPref = getPreferences(MODE_PRIVATE); // для sPref определяем ограничены доступ
        SharedPreferences.Editor ed = sPref.edit(); // выполняем метод Editor класса SharPref
        ed.putInt(key, val);//записываем в в наш sPref key and val
        ed.apply();//сохраняем
 
        loadPref(key,val);//вызов
    }
 
    public int loadPref(String key, int defVal) {
          sPref = getPreferences(MODE_PRIVATE);
        int loadInt = sPref.getInt(key, defVal);// вот тут я не очень понимаю , мы перем наши данные из нашего
        //sPref и помещаем их в переменную int ? два значения ?
        return Log.d("MYLOG", "return = " + String.valueOf(loadInt));
    }
 
}
вот лог
D/MYLOG﹕ savePref
D/MYLOG﹕ Key = Key1, Val 1
D/MYLOG﹕ return = 1
0
21.11.2015, 17:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2015, 17:46
Помогаю со студенческими работами здесь

SharedPreferences
выручайте, в чем ошибка? выводит 94 и 95, а должно 84 и 85 public class MainActivity extends...

SharedPreferences
Всем привет, вопрос: Как через SharedPreferences сохранять &quot;String текст&quot;, я многое перепробовал...

SharedPreferences
как сохранить целое значение в SharedPreferences?

Array в SharedPreferences
Добрый вечер! Вопрос заключается в том, можно ли сохранить настройки приложения с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru