-1

好的,简单地说,我正在尝试保存数据,然后将数据加载到 NumberPicker 和从 NumberPicker 加载数据。NumberPicker 值最初使用字符串数组设置,因为需要从 NumberPicker setDisplayedValues() 方法中选择特定值。

在加载时保存它没有任何问题。因为我猜我需要给出在数组中找到该值的位置的索引。这是我一直在尝试但无济于事

minSpinNP.setValue(Integer.parseInt(spinValues[minSpinPos]));
maxSpinNP.setValue(Integer.parseInt(spinValues[maxSpinPos]));

我相信 numberPicker 必须采用 int 或字符串数​​组。加载 prefs() 时我也收到此错误

12-12 19:57:34.724: E/AndroidRuntime(7612): Caused by: java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer
12-12 19:57:34.724: E/AndroidRuntime(7612):
at   android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:240)
12-12 19:57:34.724: E/AndroidRuntime(7612):     
at sweetbix.android.shredbox.JumpSettings.loadPrefs(JumpSettings.java:228)

任何帮助,将不胜感激 :)

全局变量

SeekBar switchSlider;
RadioGroup directionRadioGroup;
RadioButton fsRadioBtn;
RadioButton bsRadioBtn;
RadioButton fsBsRadioBtn;
RadioButton dirOffRadioBtn;
SeekBar corkSlider;
SeekBar spinSlider;
SeekBar grabSlider;
NumberPicker minSpinNP;
NumberPicker maxSpinNP;
Button saveBtn;

boolean safe;
int maxSpinPos;
int minSpinPos;


private int switchProbability;
private int corkProbability;
private int spinProbability;
private int grabProbability;
private int spin = 0;
private int minSpin;
private int maxSpin;
private String[] spinValues = new String[8];

添加到 spinValues 的字符串

for (int i = 0; i < spinValues.length; i++) {
        String rotation = Integer.toString(spin += 180);
        spinValues[i] = rotation;
    }

使用的保存方法,

private void savePrefs(String key, int value){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    Editor editor = prefs.edit();
    editor.putInt(key, value);
    editor.commit();
}

numberpicker 的 onchangelistener,一些代码评论但显示了我尝试过的内容。

maxSpinNP.setOnValueChangedListener(new OnValueChangeListener(){

        @Override
        public void onValueChange(NumberPicker picker, int oldVal,
                int newVal) {
            // TODO Auto-generated method stub
            //maxSpin = Integer.parseInt(spinValues[maxSpinNP.getValue()]);
            //maxSpin = spinValues[maxSpinNP.getValue()];
            maxSpinPos = Arrays.asList(spinValues).indexOf(maxSpin);
            Toast.makeText(JumpSettings.this,"maxspinpos:"+ maxSpinPos,
                    Toast.LENGTH_SHORT).show();


        }

    });

调用保存方法

savePrefs("MIN_SPIN_JUMPS", minSpinPos);
savePrefs("MAX_SPIN_JUMPS", maxSpinPos);

最后调用 loadprefs 方法,更多代码注释

private void loadPrefs(){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    switchProbability = prefs.getInt("SWITCH_JUMPS", 35);
    switchSlider.setProgress(switchProbability);
    corkProbability = prefs.getInt("CORK_JUMPS", 20);
    corkSlider.setProgress(corkProbability);
    spinProbability = prefs.getInt("SPIN_JUMPS", 80);
    spinSlider.setProgress(spinProbability);
    grabProbability = prefs.getInt("GRAB_JUMPS", 80);
    grabSlider.setProgress(grabProbability);
    minSpinPos = prefs.getInt("MIN_SPIN_JUMPS", 0);
    maxSpinPos = prefs.getInt("MAX_SPIN_JUMPS", 7);
    //minSpin = prefs.getString("MIN_SPIN_JUMPS", "180");
    //minSpinNP.setValue(Integer.parseInt(spinValues[minSpinPos]));
    //maxSpin = prefs.getString("MAX_SPIN_JUMPS", 1080);
    //maxSpinNP.setValue(Integer.parseInt(spinValues[maxSpinPos]));
    Log.e("min", "" + minSpinPos);
    Log.e("max", "" + maxSpinPos);
    //Log.e("prob", switchProbability + "");
}

这是第 228 行

minSpinPos = prefs.getInt("MIN_SPIN_JUMPS", 0);
4

1 回答 1

0

解决了。我在加载首选项方法中使用了它

for( int i=0; i<spinValues.length ; i++ )
        if( spinValues[i].equals(maxSpinPos) )
             maxSpinNP.setValue(i);

numberpicker 需要一个 int 值,我以为我在尝试获取数组索引时得到了一个 int 值,但我实际上是在获取索引并将变量设置为该索引的值

耶 :)

于 2013-12-13T00:44:24.810 回答