更新到 Android 中的 table 会导致显示的记录重复
Updating to a table in Android results in duplication of shown records
在 Android 工作,我在从内部数据库中提取的选项卡上有一个 table。在另一个选项卡上输入数据后,我希望更新 table 以显示新记录。
目前我正在调用以下内容,
public void createDataTable(View v) {
DBAdapter msdb= new DBAdapter(getActivity().getApplicationContext(),MainActivity.szDbName, null);
db=msdb.getWritableDatabase();
Cursor c=db.rawQuery("SELECT * FROM surveyDB", null);
Integer iRowid = c.getColumnIndex("_id");
Integer iSpecies = c.getColumnIndex("species");
Integer iCount = c.getColumnIndex("surveycount");
if(c.getCount()>0){
c.moveToFirst();
do{
//row=new TableRow(this.getActivity());
final TableRow row=new TableRow(this.getActivity());
row.setClickable(true);
//Setting up the first column parameters
tvRowid=new TextView(getActivity());
tvRowid.setText(c.getString(iRowid));
row.addView(tvRowid);
//Setting up the second column parameters
tvSpecies=new TextView(getActivity());
tvSpecies.setText(c.getString(iSpecies));
tvSpecies.setTextAppearance(getActivity(), R.style.myStyle);
tvSpecies.setGravity(Gravity.RIGHT);
row.addView(tvSpecies); //adding column to row
//Setting up third column parameters
tvSurveyCount=new TextView(getActivity());
tvSurveyCount.setText(c.getString(iCount));
tvSurveyCount.setTextAppearance(getActivity(), R.style.myStyle);
tvSurveyCount.setPadding(4, 1, 4, 1);
tvSurveyCount.setGravity(Gravity.RIGHT);
row.addView(tvSurveyCount);
tableLayout.addView(row,new TableLayout.LayoutParams(
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
}while(c.moveToNext());
c.close();
db.close();
}else{
Toast.makeText(getActivity().getApplicationContext(), "The table is empty. Please add data.", Toast.LENGTH_LONG).show();
}
}
但是,这会导致记录重复,如下所示。
创建三个记录:七只狗、五只猫和 15 只长尾小鹦鹉显示以下 table、
Rowid Species Count
1 dog 7
1 dog 7
2 cat 5
1 dog 7
2 cat 5
3 parakeet 15
即使数据库中的记录是正确的(没有重复)。基本上 table 被重新创建了三次,数据库内容附加到选项卡上的现有记录。
问题:如何从数据库中调用刷新选项卡上的 table 从数据库中的记录以反映添加的记录,以及对以前记录的更新?提前致谢。
如果您每次调用 createDataTable
时都继续向 TableLayout
添加行,而没有清除您在之前调用 createDataTable
时添加的行,那么您将受到这种影响。
解决方法是在createDataTable
开头调用tableLayout.removeAllViews()
在 Android 工作,我在从内部数据库中提取的选项卡上有一个 table。在另一个选项卡上输入数据后,我希望更新 table 以显示新记录。 目前我正在调用以下内容,
public void createDataTable(View v) {
DBAdapter msdb= new DBAdapter(getActivity().getApplicationContext(),MainActivity.szDbName, null);
db=msdb.getWritableDatabase();
Cursor c=db.rawQuery("SELECT * FROM surveyDB", null);
Integer iRowid = c.getColumnIndex("_id");
Integer iSpecies = c.getColumnIndex("species");
Integer iCount = c.getColumnIndex("surveycount");
if(c.getCount()>0){
c.moveToFirst();
do{
//row=new TableRow(this.getActivity());
final TableRow row=new TableRow(this.getActivity());
row.setClickable(true);
//Setting up the first column parameters
tvRowid=new TextView(getActivity());
tvRowid.setText(c.getString(iRowid));
row.addView(tvRowid);
//Setting up the second column parameters
tvSpecies=new TextView(getActivity());
tvSpecies.setText(c.getString(iSpecies));
tvSpecies.setTextAppearance(getActivity(), R.style.myStyle);
tvSpecies.setGravity(Gravity.RIGHT);
row.addView(tvSpecies); //adding column to row
//Setting up third column parameters
tvSurveyCount=new TextView(getActivity());
tvSurveyCount.setText(c.getString(iCount));
tvSurveyCount.setTextAppearance(getActivity(), R.style.myStyle);
tvSurveyCount.setPadding(4, 1, 4, 1);
tvSurveyCount.setGravity(Gravity.RIGHT);
row.addView(tvSurveyCount);
tableLayout.addView(row,new TableLayout.LayoutParams(
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
}while(c.moveToNext());
c.close();
db.close();
}else{
Toast.makeText(getActivity().getApplicationContext(), "The table is empty. Please add data.", Toast.LENGTH_LONG).show();
}
}
但是,这会导致记录重复,如下所示。 创建三个记录:七只狗、五只猫和 15 只长尾小鹦鹉显示以下 table、
Rowid Species Count
1 dog 7
1 dog 7
2 cat 5
1 dog 7
2 cat 5
3 parakeet 15
即使数据库中的记录是正确的(没有重复)。基本上 table 被重新创建了三次,数据库内容附加到选项卡上的现有记录。
问题:如何从数据库中调用刷新选项卡上的 table 从数据库中的记录以反映添加的记录,以及对以前记录的更新?提前致谢。
如果您每次调用 createDataTable
时都继续向 TableLayout
添加行,而没有清除您在之前调用 createDataTable
时添加的行,那么您将受到这种影响。
解决方法是在createDataTable
tableLayout.removeAllViews()