嘿,我最近開始android開發,並遇到了一個問題時,從數據庫中保存/加載數據。我從here拿到了數據庫類,稍作修改。android sqlite問題
我的問題是我得到了一些edittexts的活動。在onCreate時,應該將數據庫中的字符串寫入edittext中,當按下按鈕時,數據庫中的數據應該更新並關閉活動。對於數據庫爲空的情況,我添加了一個用於讀取數據庫的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);
}
現在一切正常。我認爲更新方法也足夠用於第一次寫入數據庫(createDuration在DbAdapter和updateDuration調用update中調用數據庫上的create方法)。
請發佈有關該錯誤的更多詳細信息。你得到什麼錯誤/異常?代碼中的哪一行會發生錯誤?你在哪裏寫數據到數據庫? –
沒有例外。問題是數據庫從不讀取。例如,當我打開活動時,在edittext中寫入內容,按保存然後重新打開活動,onCreate應該將剛保存的字符串寫回edittext,但edittext是空的。我用dba.updateDuration寫入數據。如果你想我可以發佈數據庫代碼,但是正如所說的,它大部分與上面的鏈接相同,只是我少了一列並更改了一些名稱。 – androidfan