从SQlite数据库更新My Spinner

时间:2012-08-08 18:26:24

标签: android database sqlite android-spinner

我发现了一个恢复我的价值的解决方案,看到我的新版populateFields() 好的,所以我一直在阅读这里的所有Spinner和SQlite帖子,似乎找不到我正在寻找的答案,所以我发布了这个场景。 我的应用程序有两个屏幕,并在我的设备上使用sqlite数据库,将editTexts中的名称和权重字段保存为字符串,如此

String eName = name.getText().toString();
String eWeight = weight.getText().toString();// where name and weight are EditTexts

我有两个旋转器如下

String eReps = spinReps.getSelectedItem().toString();
String eSets = spinSets.getSelectedItem().toString();

然后我调用它来添加到数据库

long id = mDbHelper.createExercise(eName, eWeight, eReps, eSets);

这是我的问题所在,有人选择创建新练习我的应用程序崩溃,因为它试图错误填充一个微调器。这就是我目前所拥有的。

private void populateFields(){
  if(mRowId != null){ // where mRowId is the selected row from the list
    Cursor exercise = mDbHelper.fetchExercise();
    name.setText(exercise.getString(exercise.
                 getColumnIndexOrThrow(ExerciseDbAdapter.KEY_NAME)));
    weight.setText(exercise.getString(exercise.
                 getColumnIndexOrThrow(ExerciseDbAdapter.KEY_WEIGHT)));
// this is the part that i need help with, I do not know how to restore 
// the current items spinner value for reps and sets from the database.

    spinReps.setSelection(exercise.getString(exercise.
                 getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS)));

    spinSets.setSelection(exercise.getString(exercise.
                 getColumnIndexOrThrow(ExerciseDbAdapter.KEY_SETS))); 
}

我假设我需要使用某种适配器来恢复我的列表项以及数据库中的当前值,我只是不确定如何。

有人可以帮我解决这个问题吗?

**以下是我的解决方案**

我不得不将我的ArrayAdapters repsAdapter,spinAdapter移出我的onCreate() 然后实现这个新的populateFields()

 private void populateFields(){
    if(mRowId != null){
        Cursor exercise = mDbHelper.fetchExercise(mRowId);
       // same as before
        name.setText(exercise.getString(exercise.
                         getColumnIndexOrThrow(ExerciseDbAdapter.KEY_NAME)));
       // get the string for sReps and sSets from the database
        String sReps = exercise.getString(exercise.
                         getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS));
        String sSets = exercise.getString(exercise.
                         getColumnIndexOrThrow(ExerciseDbAdapter.KEY_SETS));
       // use the strings to get their position in my adapters
        int r = repsAdapter.getPosition(sReps);
        int s = setsAdapter.getPosition(sSets);
       // set their returned values to the selected spinner Items
        spinReps.setSelection(r);
        spinSets.setSelection(s);
       // same as before
        weight.setText(exercise.getString(exercise.
                         getColumnIndexOrThrow(ExerciseDbAdapter.KEY_WEIGHT)));
    }
}

1 个答案:

答案 0 :(得分:0)

将Spinner设置为值而不是位置的方法取决于您使用的适配器。

  1. ArrayAdapter,这个很容易:

    int position = adapter.getPosition(exercise.getString(exercise.
                     getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS)));
    spinReps.setSelection(position);
    
  2. SimpleCursorAdapter,这个有点困难:

    String match = exercise.getString(exercise.getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS));
    
    Cursor cursor = adapter.getCursor();
    cursor.moveToPosition(-1);
    int columnIndex = cursor.getColumnIndexOrThrow(ExerciseDbAdapter.KEY_REPS);
    while(cursor.moveToNext()) {
        if(cursor.getString(columnIndex).equals(match))
            break;
    }
    spinReps.setSelection(cursor.getPosition());
    
  3. 如果您使用的是其他类型的适配器而无法修改上述代码以适应它,请告诉我们。希望有所帮助!