簡體   English   中英

Sharedpreferences的微調器問題

[英]Spinner problems with Sharedpreferences

對不起,這是我第一次在這個網站上提問

我的功能:我設置了兩個按鈕,以使用功能Sharedpreferences將信息還原並保存在Spinner和EditText中。

我第一次執行程序。 如果我單擊“恢復”按鈕以在Spinner中恢復信息,該程序將顯示錯誤狀態。 但是,當我在EditText中還原信息時,我還沒有遇到問題。

這是Spinner中的代碼

private Spinner.OnItemSelectedListener getfeet = new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        // TODO Auto-generated method stub
        feet_out = parent.getSelectedItemPosition() + 2;
        select_f = feet.getSelectedItemPosition(); //save the position you choose
        Toast.makeText(MainActivity.this,
                "you chose " + parent.getSelectedItem().toString(),
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // TODO Auto-generated method stub
    }
};
private Spinner.OnItemSelectedListener getinch = new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        // TODO Auto-generated method stub
        inch_out = parent.getSelectedItemPosition();
        select_i = inch.getSelectedItemPosition(); //save the position you choose
        Toast.makeText(MainActivity.this,
                "you chose " + parent.getSelectedItem().toString(),
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // TODO Auto-generated method stub

    }

};

這是執行Sharedpreferences中保存功能的代碼

private void save_() {
    settings = getSharedPreferences("DATA", 0);
    settings.edit().putInt("DATA_FEET", select_f) //store the position in DATA_FEET and DATA_INCH
            .putInt("DATA_INCH", select_i)
            .putString("DATA_WEIGHT", weight.getText().toString()).commit();
    Toast.makeText(MainActivity.this, R.string.done, Toast.LENGTH_SHORT) //save done
            .show();
}

這是執行Sharedpreferences中的restore功能的代碼

private void restore_() {
    feet.setSelection(settings.getInt("DATA_FEET", select_f)); //restore the position
    inch.setSelection(settings.getInt("DATA_INCH", select_i));
    weight.setText(settings.getString("DATA_WEIGHT", "EMPTY"));

}

我的問題是我無法在第一次執行的程序中使用還原功能。 有解決問題的辦法嗎? 因為在EditText中是正常的,但在Spinner中是異常的。 謝謝 :))

這是狀態。 :))

    10-23 23:14:11.677: D/TextLayoutCache(26370): Using debug level: 0 - Debug Enabled: 0
    10-23 23:14:11.747: D/libEGL(26370): loaded /system/lib/egl/libGLES_android.so
    10-23 23:14:11.797: D/libEGL(26370): loaded /system/lib/egl/libEGL_mali.so
    10-23 23:14:11.827: D/libEGL(26370): loaded /system/lib/egl/libGLESv1_CM_mali.so
    10-23 23:14:11.827: D/libEGL(26370): loaded /system/lib/egl/libGLESv2_mali.so
    10-23 23:14:11.887: D/OpenGLRenderer(26370): Enabling debug mode 0
    10-23 23:14:16.762: D/AndroidRuntime(26370): Shutting down VM
    10-23 23:14:16.762: W/dalvikvm(26370): threadid=1: thread exiting with uncaught exception (group=0x40aaa210)
    10-23 23:14:16.802: E/AndroidRuntime(26370): FATAL EXCEPTION: main
    10-23 23:14:16.802: E/AndroidRuntime(26370): java.lang.NullPointerException
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at com.example.bmi.MainActivity.restore_(MainActivity.java:44)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at com.example.bmi.MainActivity.access$1(MainActivity.java:43)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at com.example.bmi.MainActivity$2.onClick(MainActivity.java:99)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at android.view.View.performClick(View.java:3574)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at android.view.View$PerformClick.run(View.java:14293)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at android.os.Handler.handleCallback(Handler.java:605)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at android.os.Handler.dispatchMessage(Handler.java:92)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at android.os.Looper.loop(Looper.java:137)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at android.app.ActivityThread.main(ActivityThread.java:4448)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at java.lang.reflect.Method.invokeNative(Native Method)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at java.lang.reflect.Method.invoke(Method.java:511)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
    10-23 23:14:16.802: E/AndroidRuntime(26370):    at dalvik.system.NativeStart.main(Native Method)

這是調用restore_()的方法

private OnClickListener reback_1 = new OnClickListener() {
    public void onClick(View v) {
        restore_();
    }
};

在將select_fselect_i替換為0 ,出現了問題

10-24 00:01:30.957: D/TextLayoutCache(28836): Using debug level: 0 - Debug Enabled: 0
10-24 00:01:31.017: D/libEGL(28836): loaded /system/lib/egl/libGLES_android.so
10-24 00:01:31.037: D/libEGL(28836): loaded /system/lib/egl/libEGL_mali.so
10-24 00:01:31.057: D/libEGL(28836): loaded /system/lib/egl/libGLESv1_CM_mali.so
10-24 00:01:31.057: D/libEGL(28836): loaded /system/lib/egl/libGLESv2_mali.so
10-24 00:01:31.087: D/OpenGLRenderer(28836): Enabling debug mode 0
10-24 00:01:36.262: D/AndroidRuntime(28836): Shutting down VM
10-24 00:01:36.262: W/dalvikvm(28836): threadid=1: thread exiting with uncaught exception (group=0x40aaa210)
10-24 00:01:36.282: E/AndroidRuntime(28836): FATAL EXCEPTION: main
10-24 00:01:36.282: E/AndroidRuntime(28836): java.lang.NullPointerException
10-24 00:01:36.282: E/AndroidRuntime(28836):    at com.example.bmi.MainActivity.restore_(MainActivity.java:44)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at com.example.bmi.MainActivity.access$1(MainActivity.java:43)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at com.example.bmi.MainActivity$2.onClick(MainActivity.java:99)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at android.view.View.performClick(View.java:3574)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at android.view.View$PerformClick.run(View.java:14293)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at android.os.Handler.handleCallback(Handler.java:605)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at android.os.Looper.loop(Looper.java:137)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at android.app.ActivityThread.main(ActivityThread.java:4448)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at java.lang.reflect.Method.invokeNative(Native Method)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at java.lang.reflect.Method.invoke(Method.java:511)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
10-24 00:01:36.282: E/AndroidRuntime(28836):    at dalvik.system.NativeStart.main(Native Method)
10-24 00:01:37.803: I/Process(28836): Sending signal. PID: 28836 SIG: 9

您使用的SharedPrefs錯誤。

feet.setSelection(settings.getInt("DATA_FEET", select_f)); 

當您嘗試從sharedPref獲取整數值時,將返回null! 因為我認為您誤會了它的完成方式:

settings.getInt("myKey", defaultValue);

返回鍵“ myKey”的值。 如果“ myKey”未設置任何值,則它將返回“ defaultValue”。 在您的情況下,它將返回“ select_f”的當前值。 看起來,第一次運行應用程序時select_f的值為null。

因此,您必須確定是要初始化“ select_f”,還是要檢索sharedPrefs或在此處輸入另一個defaultValue。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM