嘿,我最近开始进行android开发,在从数据库保存/加载数据时遇到了问题。我从here获取了数据库类,稍作修改。
我的问题是我有一些带有一些edittexts的活动。在onCreate中,应将数据库中的字符串写入edittexts,按下该按钮时,应更新数据库中的数据并关闭活动。对于数据库为空的情况,我添加了一个带有cursor.getCount!= 0的if子句来读取数据库,但这种情况永远不会成真。
这是我的代码
package com.gabrielisonline.timetable;
public class DurationActivity extends Activity {
DbAdapter dba;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.duration);
Button saveButton = (Button) findViewById(R.id.duration_button1);
saveButton.setOnClickListener(new SaveButtonListener());
dba = new DbAdapter(this);
dba.open();
Cursor c = dba.fetchAllDurations();
if (c.getCount() != 0) {
int i = c.getColumnIndex(DbAdapter.KEY_TIME);
((EditText) findViewById(R.id.duration_length)).setText(dba.fetchDuration(0).getString(i));
((EditText) findViewById(R.id.duration_lesson1)).setText(dba.fetchDuration(1).getString(i));
((EditText) findViewById(R.id.duration_lesson2)).setText(dba.fetchDuration(2).getString(i));
((EditText) findViewById(R.id.duration_lesson3)).setText(dba.fetchDuration(3).getString(i));
((EditText) findViewById(R.id.duration_lesson4)).setText(dba.fetchDuration(4).getString(i));
((EditText) findViewById(R.id.duration_lesson5)).setText(dba.fetchDuration(5).getString(i));
((EditText) findViewById(R.id.duration_lesson6)).setText(dba.fetchDuration(6).getString(i));
((EditText) findViewById(R.id.duration_lesson7)).setText(dba.fetchDuration(7).getString(i));
((EditText) findViewById(R.id.duration_lesson8)).setText(dba.fetchDuration(8).getString(i));
((EditText) findViewById(R.id.duration_lesson9)).setText(dba.fetchDuration(9).getString(i));
((EditText) findViewById(R.id.duration_lesson10)).setText(dba.fetchDuration(10).getString(i));
}
}
public class SaveButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
String l = ((EditText) findViewById(R.id.duration_length)).getText().toString();
String l1 = ((EditText) findViewById(R.id.duration_lesson1)).getText().toString();
String l2 = ((EditText) findViewById(R.id.duration_lesson2)).getText().toString();
String l3 = ((EditText) findViewById(R.id.duration_lesson3)).getText().toString();
String l4 = ((EditText) findViewById(R.id.duration_lesson4)).getText().toString();
String l5 = ((EditText) findViewById(R.id.duration_lesson5)).getText().toString();
String l6 = ((EditText) findViewById(R.id.duration_lesson6)).getText().toString();
String l7 = ((EditText) findViewById(R.id.duration_lesson7)).getText().toString();
String l8 = ((EditText) findViewById(R.id.duration_lesson8)).getText().toString();
String l9 = ((EditText) findViewById(R.id.duration_lesson9)).getText().toString();
String l10 = ((EditText) findViewById(R.id.duration_lesson10)).getText().toString();
dba.updateDuration(0,l);
dba.updateDuration(1,l1);
dba.updateDuration(2,l2);
dba.updateDuration(3,l3);
dba.updateDuration(4,l4);
dba.updateDuration(5,l5);
dba.updateDuration(6,l6);
dba.updateDuration(7,l7);
dba.updateDuration(8,l8);
dba.updateDuration(9,l9);
dba.updateDuration(10,l10);
dba.close();
finish();
}
}
}
感谢您的帮助!
编辑:
感谢您的回答。问题确实是我没有真正写入数据库的东西。我没有使用updateDuration,而是将onClick方法中的代码更改为:
if (c.getCount() != 0) {
dba.updateDuration(1,l);
dba.updateDuration(2,l1);
dba.updateDuration(3,l2);
dba.updateDuration(4,l3);
dba.updateDuration(5,l4);
dba.updateDuration(6,l5);
dba.updateDuration(7,l6);
dba.updateDuration(8,l7);
dba.updateDuration(9,l8);
dba.updateDuration(10,l9);
dba.updateDuration(11,l10);
} else {
dba.createDuration(l);
dba.createDuration(l1);
dba.createDuration(l2);
dba.createDuration(l3);
dba.createDuration(l4);
dba.createDuration(l5);
dba.createDuration(l6);
dba.createDuration(l7);
dba.createDuration(l8);
dba.createDuration(l9);
dba.createDuration(l10);
}
现在一切正常。我认为更新方法对于第一次写入db也是足够的(createDuration在DbAdapter中调用数据库上的create方法并且updateDuration调用update)。
答案 0 :(得分:0)
你有没有写过任何东西给DB?你知道DB肯定有数据吗?如果没有尝试安装SQLLite浏览器,例如http://sqlitebrowser.sourceforge.net/,请查看表格。
这应该可以帮助您确定问题是写入表格还是从中读取。如果您提供DBAdapter类
,可能会进一步提供帮助答案 1 :(得分:0)
如果光标没有获取任何值,则可能意味着数据库没有任何值。我在代码中注意到的一个错误是,在将数据库值放入游标后,您必须调用
c.moveToFirst();
将光标指针移动到第一条记录。如果不移动指针,则默认情况下指向位置-1。只有在那之后才能调用c.getString(1)来获取值。