Hey i recently started android development and encountered a problem when saving/loading data from a database. I took the database class from here with some slight changes.
My problem is i got an activity with some edittexts. At onCreate the strings from the database should be written into the edittexts and when pressing the button the data in the database should be updated and activity closed. For the case that the database is empty I added an if-clause with cursor.getCount!=0 for reading the database, but this condition never gets true.
Here is my code
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();
}
}
}
Thanks for your help!
EDIT:
Thanks for your answers guys. The problem was indeed thet I didn’t really write something into the databse. Instead of just using updateDuration i changed the code in the onClick method to:
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);
}
Now everything is working. I thought the update method would be enough also for the first write to the db (createDuration calls the create method on the database in DbAdapter and updateDuration calls update).
Have you ever written anything to the DB? do you know that the DB definitely has data in it? If not try installing a SQLLite browser such as http://sqlitebrowser.sourceforge.net/ and have a look at the tables.
That should help you identify if the problem is with writing to the table or reading from it. Might be able to help further if you provide your DBAdapter class