Java Android-在单独的类中使用共享首选项?
我想在android中使用共享首选项保存数据。但我希望使用单独的类来完成此任务。我已经实现了这个类,如下所示Java Android-在单独的类中使用共享首选项?,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,我想在android中使用共享首选项保存数据。但我希望使用单独的类来完成此任务。我已经实现了这个类,如下所示 import android.content.Context; import android.content.SharedPreferences; public class SavePref { private Context context; public SavePref(Context context){ this.context = cont
import android.content.Context;
import android.content.SharedPreferences;
public class SavePref {
private Context context;
public SavePref(Context context){
this.context = context;
}
public void saveInt(String key, int value) {
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(key, value);
editor.commit();
}
}
但是getActivity()
上有一个错误
如何解决这个问题?谢谢你的改变
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
到
您已经有了上下文,那么为什么要使用getActivity()
实际上getActivity()
用于获取Fragment
中的上下文getActivity()
是Fragment
的一种方法,而不是SavePref
。在您的情况下,简单的解决方法是使用您作为成员变量保留的上下文来检索SharedReferences
。另一种方法是避免将上下文保留为成员变量,以某种方式将共享首选项链接到SavePref
类的实例,并使用静态方法
public static void saveInt(Context context, String key, int value) {
SharedPreferences sharedPref = context.getDefaultSharedPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(key, value);
editor.commit();
}
并对该方法进行如下处理:
SavePref.saveInt(getActivity(), key, value);
从片段
或
SavePref.saveInt(this, key, value);
从
活动
。这样,您就不必在每次需要调用saveInt
时都实例化SavePref,并且可以避免存储对上下文的引用 我创建了一个类来做同样的事情。通过这种方式,您可以保存布尔值、整数、字符串数据,或者检查数据是否已保存在应用程序的特定首选项组中
因此,您需要创建一个类“DataProcessor.java”,并将内容放在下面。我还将留下一些关于如何使用它的例子
我希望它能帮助你
import android.content.Context;
import android.content.SharedPreferences;
public class DataProccessor {
private static Context context;
public DataProccessor(Context context){
this.context = context;
}
public final static String PREFS_NAME = "appname_prefs";
public boolean sharedPreferenceExist(String key)
{
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);
if(!prefs.contains(key)){
return true;
}
else {
return false;
}
}
public static void setInt( String key, int value) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME,0);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(key, value);
editor.apply();
}
public static int getInt(String key) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);
return prefs.getInt(key, 0);
}
public static void setStr(String key, String value) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME,0);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.apply();
}
public static String getStr(String key) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);
return prefs.getString(key,"DNF");
}
public static void setBool(String key, boolean value) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME,0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(key, value);
editor.apply();
}
public static boolean getBool(String key) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);
return prefs.getBoolean(key,false);
}
}
为了使用它,我将向您展示一些关于如何保存字符串值的小示例,以备在活动、片段或服务中使用
对于活动
//// To Save a value
DataProccessor dataProccessor = new DataProccessor(this);
dataProccessor.setStr("email","johndoe@mail.com");
//// To Retreive a value
dataProccessor.getStr("email");
对于片段
//// To Save a value
DataProccessor dataProccessor = new DataProccessor(getActivity());
dataProccessor.setStr("email","johndoe@mail.com");
//// To Retreive a value
dataProccessor.getStr("email");
对于服务
//// To Save a value
DataProccessor dataProccessor = new DataProccessor(getApplicationContext());
dataProccessor.setStr("email","johndoe@mail.com");
//// To Retreive a value
dataProccessor.getStr("email");
您可以在项目中简单地创建seprate常量类,并在需要保存或检索数据时以非常简单的方式调用它
class Constant {
companion object {
val loginData: String = "LoginData"
val token: String = "token"
//create the fuction of shared prefrence
fun setpref(context: Context): SharedPreferences {
return context.getSharedPreferences("Table Data", Context.MODE_PRIVATE)
}
}
}
不要将Android上下文类放在静态字段中;这是一个内存泄漏(也破坏了即时运行)@jeprubio我创建了一个单独的类,你可以在任何地方访问它,我知道你的意思,但是任何用户都必须以他们想要的方式管理他们的内存使用
//// To Save a value
DataProccessor dataProccessor = new DataProccessor(getApplicationContext());
dataProccessor.setStr("email","johndoe@mail.com");
//// To Retreive a value
dataProccessor.getStr("email");
class Constant {
companion object {
val loginData: String = "LoginData"
val token: String = "token"
//create the fuction of shared prefrence
fun setpref(context: Context): SharedPreferences {
return context.getSharedPreferences("Table Data", Context.MODE_PRIVATE)
}
}
}
class PreferenceUtil {
private var msharedPref: SharedPreferences? = null
private var mEditor: Editor? = null
companion object {
private var sInstance: PreferenceUtils? = null
fun getInstance(context: Context): PreferenceUtils {
if (sInstance == null) {
sInstance = PreferenceUtils(context)
}
return sInstance as PreferenceUtils
}
}
constructor()
constructor(mContext: Context?) {
msharedPref = mContext?.getSharedPreferences(APP_PREF, MODE_PRIVATE)
mEditor = mSettings?.edit()
}
// get Boolean value
fun getValue(key: String, defValue: Boolean): Boolean {
return msharedPref!!.getBoolean(key, defValue)
}
// set Boolean value
fun setValue(key: String, value: Boolean) {
mEditor!!.putBoolean(key, value)
mEditor!!.apply()
}
}
// Initialize the Pref class in your required class
class Abc : AppCompatActivity() {
var mPreferenceUtil: PreferenceUtil = PreferenceUtils(this)
mPreferenceUtil.setValue(ABC_POPUP, false)
}
package com.app.luandryuser.Util;
import android.content.Context;
import android.content.SharedPreferences;
public class DataStorage {
public static final int INTEGER = 1;
public static final int FLOAT = 2;
public static final int LONG = 3;
public static final int STRING = 4;
public static final int BOOLEAN = 5;
private Context ctx;
private SharedPreferences pref;
private SharedPreferences.Editor writer;
public DataStorage(Context ctx) {
this.ctx = ctx;
pref = ctx.getSharedPreferences("rural", Context.MODE_PRIVATE);
writer = pref.edit();
}
public void write(String key, int value) {
writer.putInt(key, value);
writer.commit();
}
public void write(String key, float value) {
writer.putFloat(key, value);
writer.commit();
}
public void write(String key, String value) {
writer.putString(key, value);
writer.commit();
}
public void write(String key, boolean value) {
writer.putBoolean(key, value);
writer.commit();
}
public void write(String key, long value) {
writer.putLong(key, value);
writer.commit();
}
public Object read(String key, int DataType) {
Object response = new Object();
if (DataType == INTEGER)
response = pref.getInt(key, 0);
else if (DataType == BOOLEAN)
response = pref.getBoolean(key, false);
else if (DataType == LONG)
response = pref.getLong(key, 0);
else if (DataType == STRING)
response = pref.getString(key, "");
else
response = pref.getFloat(key, 0.0f);
return response;
}
}