0

申し訳ありませんが、このサイトに質問を投稿するのはこれが初めてです

私の機能: 2 つのボタンを設定して、Sharedpreferences 関数を使用して Spinner と EditText に情報を復元して保存します。

初めてプログラムを実行します。「復元」ボタンをクリックして Spinner の情報を復元すると、プログラムはエラー状態になります。しかし、EditText の情報を復元しても問題は発生しませんでした。

これはスピナーのコードです

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 で復元の機能を実行するコードです。

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
4

1 に答える 1

0

SharedPrefs を間違って使用しています。

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

sharedPref から整数値を取得しようとすると、null が返されます。私はあなたがそれがどのように行われるかを誤解していると思うので:

settings.getInt("myKey", defaultValue);

キー「myKey」の値を返します。「myKey」に値が設定されていない場合は、「defaultValue」が返されます。あなたの場合、「select_f」の現在の値を返します。アプリケーションを初めて実行したとき、select_f の値は null です。

そのため、sharedPrefs を取得する前に「select_f」を初期化するか、別の defaultValue をここに入力するかを決定する必要があります。

于 2013-10-23T15:36:21.923 に答える