Android:仅在用户保存

时间:2016-08-23 12:25:44

标签: android sqlite sql-insert

我的应用可让用户修改影响多行的信息。用户可以修改其中的几个,但我只想在用户选择保存时将更改应用于数据库(他可以放弃更改) 我遇到了一些问题。

现在我正在尝试使用values.put然后在save onClickListener中调用db.insert,但是如果用户更改了多行,这只会反映用户所做的最后一次更改,对吧? (一行由name,date,spinnerGeneral,spinnerSprint,timeSprint,spinnerRest,timeRest组成)我该如何处理?一个值数组,然后为每个值调用insert?

这是我现在的代码

values.put( "name", workoutName );
values.put( "date",datewo );
values.put( "spinnerGeneral", data.get(1).getSpinnerGeneral() );
values.put( "spinnerSprint", data.get(1).getSpinnerSprint() );
values.put( "timeSprint", data.get(1).getTimeSprint() );
values.put( "spinnerRest", data.get(1).getSpinnerRest() );
values.put( "timeRest", data.get(1).getTimeRest() );


[....]


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    saveData=true;
    int id = item.getItemId();

if (id == R.id.action_save){
    long rowId = db.insert("workout",null,values); 
    onBackPressed();
}

我还考虑过在用户首次修改行时调用db.insert(),并将row_ID保存到数组rowID []中,如果用户决定放弃更改,只需使用row_ID删除所有行我有。这可能吗?它只是使用DELETE * FROM exercise WHERE Row_ID = rowID [1 ...]吗? Row_ID是自动生成的列的名称吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

对于初学者,我会在现实生活对象之后建模我的数据库,而不是UI组件,将微调器名称留在DB列名称之外,除非您当然要谈论自行车旋转锻炼。

我建议不要添加数据,然后在用户决定丢弃数据时再将其删除。它增加了不必要的复杂性。

解决你提供的小代码,我认为解决方案是这样的:

private void collectUIValues() {
   values.clear();
   values.put( "name", workoutName );
   values.put( "date",datewo );
   values.put( "spinnerGeneral", data.get(1).getSpinnerGeneral() );
   values.put( "spinnerSprint", data.get(1).getSpinnerSprint() );
   values.put( "timeSprint", data.get(1).getTimeSprint() );
   values.put( "spinnerRest", data.get(1).getSpinnerRest() );
   values.put( "timeRest", data.get(1).getTimeRest() );
}

if (id == R.id.action_save){
    collectUIValues();        
    long rowId = db.insert("workout",null,values); 

    onBackPressed();
}

顺便说一下,我总是在访问数据库时尝试使用ORM。有更多的开销,但它使代码更清晰,更不容易出错。