Edit: жаль, что я изначально прочитал вопрос неправильно
Могу ли я использовать SharedPreferences в исполняемых файлах?
Да. Если данные имеют примитивный тип, вам определенно нужно.
Как?
От разработчиков Android documentation:
public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop(){
super.onStop();
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// Commit the edits!
editor.commit();
}
}
я опубликовал аналогичный ответ о том, как использовать SharedPrefs here просто принять к сведению, что использование случае из SharedPreferences брейков преимуществ HashMap, который очень быстро находит и получает значение для ключа.
Одним из способов вы можете сделать это состоит в следующем:
//if you are running the code inside from an Activity
Context context = this;
SharedPreferences userSharedPrefs = context.getSharedPreferences("USER_NAME_PREFS", MODE_PRIVATE);
SharedPreferences pwdSharedPrefs = context.getSharedPreferences("PWD_PREFS", MODE_PRIVATE);
Метод GETALL() возвращает структуру данных, называемую HashMap
, который работает как словарь:
Для каждого значения хранится там уникальный ключ.
Sidenote: Получая их все сразу вы своего рода нарушение цель этой структуры данных, но давайте продолжим
Map<String, String> userNameHashMap = (Map<String, String>)userSharedPrefs.getAll();
Map<String, String> pwdHashMap = (Map<String, String>)pwdSharedPrefs.getAll();
, то вы можете делать все, что вы хотите с ними
хотят их в списке ? (Я предполагаю, что ваши имена пользователей являются строки, кстати)
List<String> userNameList = new LinkedList<>();
userNameList.addAll(userNameHashMap.values());
хочет знать, есть ли пароль для пользователя сортира?
boolean johnHasPasswd = pwdHashMap.containsKey("john");
String johnsPass;
if(johnHasPasswd)
johnsPass = pwdHashMap.get("john");
Если вы хотите использовать собственные механизмы хранения данных, вы ограничены следующие
вариантов хранения Данных являются следующим:
- Общих предпочтений хранения личных примитивных данных в парах ключ-значение.
- Internal Storage Храните личные данные в памяти устройства.
- External Storage Хранить общедоступные данные на общем внешнем хранилище.
- SQLite Базы данных Храните структурированные данные в частной базе данных.
- сети Хранение данных Подключение к сети с вашим собственным сетевым сервером
Вы должны взглянуть на эти official docs с сайта разработчиков.
Надеюсь, это поможет!
_ «Основываясь только на ваших требованиях не желая SharedPreferences» _ ОП _does_ хотите использовать 'SharedPreferences', если это возможно. – Michael
Вы правы, мои плохие – HenriqueMS
Спасибо за ваш ответ. Мне нужно знать, как использовать приватные примитивные данные Shared Preferences Store в парах ключ-значение в нативном C в android NDK. Требование JNI не требуется, поскольку я работаю над исполняемыми файлами. –