Java Android:共享首选项&设置器和获取器

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

我正在使用一个简单的set&get类,这样我可以在整个应用程序中检索变量,但我需要存储该类以供以后使用,所以我想使用共享首选项来存储它,但我不确定如何正确实现它。我尝试在setter方法中实现共享首选项,没有错误,但运行时会崩溃

这是上课时间

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小部件之前,必须加载布局。但是你在某个类中加载了布局,对吗?你为什么不把你的能手和二传手放在那里呢?答案对你有帮助吗?谢谢,这或多或少是我最后做的事情,到目前为止效果还不错