Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Василевский
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 102
#1

SharedPreferences, HashMap - Программирование Android

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

Хочу сделать 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;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2015, 17:03     SharedPreferences, HashMap
Посмотрите здесь:

SharedPreferences - Программирование Android
String PR = &quot;key&quot;; SharedPreferences mySharedPreferences = getSharedPreferences(PR, Activity.MODE_PRIVATE); String...

SharedPreferences - Программирование Android
Доброй ночи. Вышла заминка с бд класса SharedPreferences. Вообщем вот код: import android.app.Activity; import...

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

SharedPreferences - Программирование Android
выручайте, в чем ошибка? выводит 94 и 95, а должно 84 и 85 public class MainActivity extends Activity { Intent intent; ...

SharedPreferences - Программирование Android
как сохранить целое значение в SharedPreferences?

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

Array в SharedPreferences - Программирование Android
Добрый вечер! Вопрос заключается в том, можно ли сохранить настройки приложения с помощью SharededPreferences в виде массива? Нужно...

Сохранение в SharedPreferences - Программирование Android
Вобщем, я хочу сделать так, чтобы при нажатии на кнопку создавалась на экране ещё одна кнопка(и так можно сделать неограниченное количество...

SharedPreferences сохранить на флешку - Программирование Android
Гуру, САБЖ! Есть ли СТАНДАРТНОЕ решение для подобного? Хочу сохранять настройки в папку на внешнюю &quot;флешку&quot; (ExternalStorage). ...

SharedPreferences putString и getString - Программирование Android
Здравствуйте! Хотел спросить как можно сделать сохранения данных для строковых значений чтобы она сохранилось и передавалось в дргуое...

SharedPreferences в другом классе - Программирование Android
Здравствуйте. Вопрос такой. есть основной класс MainActivity и другой класс, пытаюсь в нем сохранить переменную string в...

SharedPreferences ArrayList<String> - Программирование Android
Можно ли массив целый сохранить именно методом SharedPreferences ?


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.11.2015, 18:58     SharedPreferences, HashMap #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
Регистрация: 25.04.2013
Сообщений: 102
21.11.2015, 05:57  [ТС]     SharedPreferences, HashMap #3
YuraAAA, УХ ТЫ даже так.
Но не работает )
может я как-то не так вызывают метод GetMap .....В Log тишина короче )
помогите пожалуйста разобраться , не первые сутки сижу с этим SharedPreferences
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
21.11.2015, 08:27     SharedPreferences, HashMap #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.
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.11.2015, 11:50     SharedPreferences, HashMap #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
Регистрация: 25.04.2013
Сообщений: 102
21.11.2015, 17:46  [ТС]     SharedPreferences, HashMap #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
Yandex
Объявления
21.11.2015, 17:46     SharedPreferences, HashMap
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru