Java Android:共享首选项&设置器和获取器
我正在使用一个简单的set&get类,这样我可以在整个应用程序中检索变量,但我需要存储该类以供以后使用,所以我想使用共享首选项来存储它,但我不确定如何正确实现它。我尝试在setter方法中实现共享首选项,没有错误,但运行时会崩溃 这是上课时间Java Android:共享首选项&设置器和获取器,java,android,sharedpreferences,getter-setter,Java,Android,Sharedpreferences,Getter Setter,我正在使用一个简单的set&get类,这样我可以在整个应用程序中检索变量,但我需要存储该类以供以后使用,所以我想使用共享首选项来存储它,但我不确定如何正确实现它。我尝试在setter方法中实现共享首选项,没有错误,但运行时会崩溃 这是上课时间 import android.app.Activity; import android.content.SharedPreferences; import android.widget.EditText; public class Passcode
import android.app.Activity;
import android.content.SharedPreferences;
import android.widget.EditText;
public class Passcode extends Activity {
private String pin;
public static final String PREFS_PASS = "MyPrefsFile";
EditText txtNewPin = (EditText)findViewById(R.id.txt_EnterNewPin);
SharedPreferences Pincode = getSharedPreferences(PREFS_PASS,0);
SharedPreferences.Editor editor = Pincode.edit();
public String getPin() {
Pincode.getString(pin,"0000");
return pin;
}
public void setPin(String pin) {
editor.putString(pin, txtNewPin.getText().toString());
editor.commit();
}
}
oncreate方法在哪里? 假设您要在共享pref中操作布尔值:
SharedPreferences SharedPref_;
Editor _prefsEditor;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// to get
SharedPref_ = this.getSharedPreferences("MainPref", MODE_WORLD_READABLE);
downloaded = SharedPref_.getBoolean("Downloaded", false) ;
// to set a shared pref :
_prefsEditor = SharedPref_.edit();
downloaded = true;
_prefsEditor.putBoolean("Downloaded",true);
_prefsEditor.commit();
}
我不相信您可以在方法之外初始化EditText,因为布局可能未设置。因此,我将把它放在方法中。这同样适用于SharedReference。只需将其全部放在方法中:
private String pin;
public static final String PREFS_PASS = "MyPrefsFile";
public String getPin() {
EditText txtNewPin = (EditText)findViewById(R.id.txt_EnterNewPin);
SharedPreferences Pincode = getSharedPreferences(PREFS_PASS,0);
Pincode.getString(pin,"0000");
return pin;
}
public void setPin(String pin) {
SharedPreferences Pincode = getSharedPreferences(PREFS_PASS,0);
SharedPreferences.Editor editor = Pincode.edit();
editor.putString(pin, txtNewPin.getText().toString());
editor.commit();
}
然而,我也看到了另一个问题:字符串pin从未初始化。在Pincode.getStringpin,0000中使用它之前,请确保它有一个值 在共享首选项中使用下面的方法获取和设置变量
/**
* This method is used to set shared preferences
* @param context Application context
* @param key shared object key
* @param value shared object value
*/
public static void setPreferences(Context context, String key, String value) {
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context);
Editor prefsEditor = appSharedPrefs.edit();
prefsEditor.putString(key, value);
prefsEditor.commit();
}
/**
* This method is used to get shared object
* @param context Application context
* @param key shared object key
* @return return value, for default "" asign.
*/
public static String getPreferences(Context context, String key) {
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context);
String json = appSharedPrefs.getString(key, "");
if (TextUtils.isEmpty(json)) {
return null;
}
return json;
}
这对我很有用。这段代码中有太多遗漏的东西,我建议你应该多读一些关于android和活动的内容。要使用sart,您应该重写onCreate加载布局,然后在yiuve完成后,您可以使用findViewById设置EditText,请参阅共享首选项处理的答案。我不确定我是否正确解释了这一点,但这并不是一项活动。我之所以这样做,只是为了能够从另一个xml文件中引入EditText,我只是希望能够go object.setPin在其他类中具有存储在共享首选项中的值,并且能够通过go调用它object.getPinOkey,但在访问布局中的UI小部件之前,必须加载布局。但是你在某个类中加载了布局,对吗?你为什么不把你的能手和二传手放在那里呢?答案对你有帮助吗?谢谢,这或多或少是我最后做的事情,到目前为止效果还不错