2012-08-08 36 views
0

我找到了解决办法恢复我的价值观,看得我populateFields()新版本 好了,所以我一直在读通过所有的微调和这里SQlite的帖子,似乎无法找到很好的答案,我正在寻找,所以我张贴这种情况。 我的应用程序有两个屏幕,并使用SQLite数据库我的设备上保存从editTexts的名称和重量字段为字符串,像这样更新从SQLite数据库我的微调

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))); 
    } 
} 

回答

0

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

  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()); 
    

如果您使用的是不同类型的适配器并且无法修改上面的代码以适应它,请告诉我。希望有所帮助!

+0

我想了解如何使用我的字符串值来获取字符串在我的适配器中的位置并使用返回的值来设置我的微调器中的位置后,我刚刚阅读了此答案,我不确定,但我相信这是你在做什么解释。感谢您付出的努力,在我需要帮助之前,我已经自己找到了自己的工作解决方案!我会将你的答案设置为我的问题的解决方案,因为它似乎是我做到这一点的方式。 – 2012-08-08 20:00:25

+0

是的,您的解决方案与我的第一个选项相同。感谢您将我的答案标记为正确,我很高兴您也找到了答案! – Sam 2012-08-08 20:54:32