#java #android #methods #sharedpreferences #preferences
#java #Android #методы #sharedpreferences #настройки
Вопрос:
Я искал ответ на этот вопрос и нашел ряд похожих вопросов, но ни один из них не казался достаточно похожим, и ни одно из решений, которые я нашел в Интернете, не решило проблему.
Для приложения для Android, которое я пишу, мне нужно сохранить настройки Android в базе данных. Для этого я хотел создать отдельный класс с функциями, которые я могу вызывать для синхронизации, обновления и т. Д. Настроек. Итак, это проблема
- Вызов initiateSaveSettings() в классе syncSettings из MainActivity
То, как я пытаюсь сделать это сейчас, — это вызвать:
syncSettings sync = new syncSettings();
sync.initiateSettingSave();
В класс syncSettings:
public class syncSettings extends Context {
public void initiateSettingsSave(){
PreferenceManager.setDefaultValues(syncSettings.this, R.xml.root_preferences, false);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
}
}
и т.д.
Проблема в том, что SharedPreferences требует расширенного контекста, и для того, чтобы это работало, Android Studio выдает ошибку для изменения syncSettings на
public abstract class syncSettings extends Context {
Выполнение этого приводит к ошибке для new syncSettings() при вызове функции, удаление аннотации приводит к ошибке в классе syncSettings. Что я могу сделать, чтобы это сработало? Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Заранее благодарю вас.
Редактировать: я очень новичок в разработке Android, поэтому, если я скажу или спрошу что-то глупое, вполне может быть, почему…
Комментарии:
1. Ваши предпочтения — это действие, в котором пользователь может выбирать вещи? как обычно работают приложения с обычными настройками?
2. Да, я использую действие настроек по умолчанию из Android Studio, но я хотел бы создать способ синхронизации этих настроек с базой данных при открытии приложения, потому что настройки, похоже, автоматически сохраняются локально.
3. Хорошо, я понимаю, итак, что вы хотите, это сохранить настройки в вашей удаленной базе данных за пределами устройства?
4. @josap97 Я думаю, что вы вызываете
sync.initiateSettingSave();
метод из контекста (т.е. activity или service). Если я прав, то вам следует изменить метод какpublic void initiateSettingsSave(Context context)
и удалить, который расширяет контекст. Теперь вы можете передать activity или service object, потому что оба являются дочерним классом Context. Просто вызовитеsync.initiateSettingSave(this);
из activity / service.
Ответ №1:
Попробуйте это:
public class syncSettings {
private Context context;
public syncSettings(Context context){
this.context = context;
}
public void initiateSettingsSave(){
PreferenceManager.setDefaultValues(syncSettings.this, R.xml.root_preferences, false);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
}
}
И в вашей деятельности:
syncSettings sync = new syncSettings(this);
sync.initiateSettingSave();
Комментарии:
1. Спасибо, похоже, это работает. Мне действительно нужно устранить некоторые другие ошибки перед правильным тестированием, но, по крайней мере, Android Studio больше не злится :).
2. Да, это не окончательное решение вашей проблемы, это просто правильно получить экземпляр SharedPreferences, но теперь вам нужно принять эти значения и сохранить их в вашей удаленной базе данных.
Ответ №2:
Я не понимаю вашей причины расширения контекста Десять. Но вы можете использовать этот класс.
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
public class PrefUtils {
/**
* Called to save supplied value in shared preferences against given key.
* @param context Context of caller activity
* @param key Key of value to save against
* @param value Value to save
*/
public static void saveToPrefs(Context context, String key, String value) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final SharedPreferences.Editor editor = prefs.edit();
editor.putString(key,value);
editor.commit();
}
/**
* Called to retrieve required value from shared preferences, identified by given key.
* Default value will be returned of no value found or error occurred.
* @param context Context of caller activity
* @param key Key to find value against
* @param defaultValue Value to return if no data found against given key
* @return Return the value found against given key, default if not found or any error occurs
*/
public static String getFromPrefs(Context context, String key, String defaultValue) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
try {
return sharedPrefs.getString(key, defaultValue);
} catch (Exception e) {
e.printStackTrace();
return defaultValue;
}
}
/**
*
* @param context Context of caller activity
* @param key Key to delete from SharedPreferences
*/
public static void removeFromPrefs(Context context, String key) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final SharedPreferences.Editor editor = prefs.edit();
editor.remove(key);
editor.commit();
}
}