Как вы используете SharedPreferences в классе non-Activity? Я попробовал создать общий класс утилиты Preferences и импортировал android.content.Context
, но Eclipse все равно не позволял мне использовать getSharedPreferences()
.
Android - Как использовать SharedPreferences в классе non-Activity?
Ответ 1
SharedPreferences связаны с контекстом. Вы можете ссылаться только на него через контекст.
Вы можете просто передать контекст в качестве параметра в свой класс. Например, в конструкторе.
В вашей деятельности выполните:
MyClass myClass = new MyClass(this);
Ответ 2
Решение, которое я нашел, было следующим:
1-В классе MainActivity (который всегда запускается перед тем, как получить какой-либо контекст в проекте) создайте статическую переменную для контекста:
public static Context contextOfApplication;
2-В важном методе этого класса (например, onCreate, конструктор и т.д.) инициализируйте эту переменную с помощью метода getApplicationContext:
public void onCreate() {
contextOfApplication = getApplicationContext();
}
3-В том же классе Создайте метод "getter" для этой переменной (он также должен быть статическим):
public static Context getContextOfApplication(){
return contextOfApplication;
}
4. В классе non-activity получите контекст, вызвав созданный метод статически:
Context applicationContext = MyActivityClass.getContextOfApplication()
;
5. Используйте класс PreferenceManager для получения переменной SharedPreferences:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
Надеюсь, что это поможет.
Ответ 3
Попробуйте использовать настройки по умолчанию с контекстом приложения. Контекст похож на среду, в которой приложение работает в linux или windows (например, такие переменные среды, как стиль окна PATH или размер консоли). Каждая активность и служба имеют свой собственный контекст, например, ориентацию экрана, тему и ярлык и т.д., Но для вашего приложения вы не хотите контекста Activity, вы хотите, чтобы в приложении было что-то глобальное, вот где контекст .getApplicationContext() полезен. Это то же самое во всем приложении и всегда будет давать вам одинаковые настройки по умолчанию.
Ответ 4
используйте этот код для нового класса.
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by Atiar Talukdar on 6/5/2017.
*/
public class TemporaryStorageSharedPreference {
protected final static int DEFAULT = 0;
int temp = 0;
public int readSharedPreference(Context context, String spName,String key){
SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
return temp = sharedPreferences.getInt(key,DEFAULT);
}
public void writeSharedPreference(Context context,String ammount,String spName,String key ){
SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key, DEFAULT);
editor.commit();
}
}
Ответ 5
В Kotlin вы можете сделать это:
val myClass = MyClass(this)
Теперь вот как вы можете получить контекст в классе
class MyClass(context: Context) {
val context: Context = context
}
Теперь, чтобы получить общие настройки с контекстом, вы можете сделать это:
context.getSharedPreferences(...)
Ответ 6
Сначала объявите частный атрибут в своем классе. В моем случае у меня есть класс BaseAdapter:
private final Context ctx;
private final Vector<Acto> actos;
public ActoAdaptador(Context ctx, Vector<Acto> as) {
super();
this.ctx = ctx;
this.actos = as;
}
Затем, когда использовать SharedPreferences:
ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE)
Этот способ работает для меня как минимум:)
Ответ 7
создать класс SharedPreferences
/**
* @param mContext
* @param key
* @param value
*/
public static void savePreferences(Context mContext, String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value).apply();
}
/**
* @param context
* @param keyValue
* @return
*/
public static String getPreferences(Context context, String keyValue) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getString(keyValue, "");
}
/**
* @param mContext
*/
public static void removeAllSharedPreferences(Context mContext) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear().apply();
}
Ответ 8
Использование статического метода для использования SharedPreference без объекта контекста, объясненного здесь
В MainActivity до OnCreate
public static SharedPreferences preferences;
В методе OnCreate добавьте
preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
Создайте класс PreferenceHelper со статическими методами геттеров и сеттеров
public class PreferenceHelper {
final public static String KEY_DEMO_NAME = "Demo Name";
public static void setName(String value) {
MainActivity.preferences.edit().putString(KEY_DEMO_NAME, value ).commit();
}
public static String getName() {
return MainActivity.preferences.getString(KEY_DEMO_NAME,"");
}
}
Ответ 9
Используйте этот код, чтобы получить context
из активности.
if (context != null) {
SharedPreferences sharedPrefs = context.getSharedPreferences("YOUR.PACKAGE.NAME", MODE_PRIVATE);
}
Ответ 10
Для Kotlin и файла настроек по умолчанию вы можете использовать следующий код:
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)