I have been playing around with SQLite a little bit and I was looking at how to create tabs. I’m using the notepad example from http://developer.android.com/resources/tutorials/notepad/index.html and made 3 tabs working with it. The problem is that sqlite isn’t able to pick up what is in the edittexts when I save the values. When I try to view them in my history tab, it only displays my old values which I had saved before I made the tabs. When I click on the ones which I had saved before I made the tabs, it takes me to the activity, WITHOUT the tabs at the top and then I’m actually able to update it. So, it seems like it’s not able to get what is in the edittexts when the tabs are at the top, but is able to when it’s a layout on it’s own.
Is there anything that I’m missing when creating the tabs?
This what I have so far in first tab:
private EditText etVelocity;
private EditText etType;
private Long mRowId;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.new_entry);
etVelocity = (EditText) findViewById(R.id.etVelocity);
etType = (EditText) findViewById(R.id.etType);
Button bSave = (Button) findViewById(R.id.btnSave);
Button bReset = (Button) findViewById(R.id.btnReset);
mRowId = null;
Bundle extras = getIntent().getExtras();
if (extras != null)
{
String title = extras.getString(DbAdapter.KEY_TITLE);
String body = extras.getString(DbAdapter.KEY_BODY);
mRowId = extras.getLong(DbAdapter.KEY_ROWID);
if (title != null)
{
etVelocity.setText(title);
}
if (body != null)
{
etType.setText(body);
}
}
bSave.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
Bundle bundle = new Bundle();
bundle.putString(DbAdapter.KEY_TITLE, etVelocity.getText().toString());
bundle.putString(DbAdapter.KEY_BODY, etType.getText().toString());
if (mRowId != null)
{
bundle.putLong(DbAdapter.KEY_ROWID, mRowId);
}
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
finish();
}
});
bReset.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
resetDisplay();
}
});
}
public void resetDisplay()
{
etVelocity.setText("");
etType.setText("");
}
History tab that displays entries:
private static final int ACTIVITY_CREATE=0;
private static final int ACTIVITY_EDIT=1;
private static final int INSERT_ID = Menu.FIRST;
private static final int DELETE_ID = Menu.FIRST + 1;
private DbAdapter mDbHelper;
private Cursor mNotesCursor;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notes_list);
mDbHelper = new DbAdapter(this);
mDbHelper.open();
fillData();
registerForContextMenu(getListView());
}
private void fillData() {
// Get all of the rows from the database and create the item list
mNotesCursor = mDbHelper.fetchAllNotes();
startManagingCursor(mNotesCursor);
// Create an array to specify the fields we want to display in the list (only TITLE)
String[] from = new String[]{DbAdapter.KEY_TITLE};
// and an array of the fields we want to bind those fields to (in this case just text1)
int[] to = new int[]{R.id.text1};
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter notes =
new SimpleCursorAdapter(this, R.layout.notes_row, mNotesCursor, from, to);
setListAdapter(notes);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, 0, R.string.menu_insert);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()) {
case INSERT_ID:
createNote();
return true;
}
return super.onMenuItemSelected(featureId, item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, DELETE_ID, 0, R.string.menu_delete);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()) {
case DELETE_ID:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
mDbHelper.deleteNote(info.id);
fillData();
return true;
}
return super.onContextItemSelected(item);
}
private void createNote() {
Intent i = new Intent(this, Tab1.class);
startActivityForResult(i, ACTIVITY_CREATE);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor c = mNotesCursor;
c.moveToPosition(position);
Intent i = new Intent(this, Tab1.class);
i.putExtra(DbAdapter.KEY_ROWID, id);
i.putExtra(DbAdapter.KEY_TITLE, c.getString(
c.getColumnIndexOrThrow(DbAdapter.KEY_TITLE)));
i.putExtra(DbAdapter.KEY_BODY, c.getString(
c.getColumnIndexOrThrow(DbAdapter.KEY_BODY)));
startActivityForResult(i, ACTIVITY_EDIT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Bundle extras = intent.getExtras();
switch(requestCode) {
case ACTIVITY_CREATE:
String title = extras.getString(DbAdapter.KEY_TITLE);
String body = extras.getString(DbAdapter.KEY_BODY);
mDbHelper.createNote(title, body);
fillData();
break;
case ACTIVITY_EDIT:
Long rowId = extras.getLong(DbAdapter.KEY_ROWID);
if (rowId != null) {
String editTitle = extras.getString(DbAdapter.KEY_TITLE);
String editBody = extras.getString(DbAdapter.KEY_BODY);
mDbHelper.updateNote(rowId, editTitle, editBody);
}
fillData();
break;
}
}
DbAdapter Class:
public static final String KEY_TITLE = "title";
public static final String KEY_BODY = "body";
public static final String KEY_ROWID = "_id";
private static final String TAG = "NotesDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private static final String DATABASE_CREATE =
"create table notes (_id integer primary key autoincrement, "
+ "title text not null, body text not null);";
private static final String DATABASE_NAME = "data";
private static final String DATABASE_TABLE = "notes";
private static final int DATABASE_VERSION = 2;
private final Context mCtx;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS notes");
onCreate(db);
}
}
public DbAdapter(Context ctx) {
this.mCtx = ctx;
}
public DbAdapter open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void close() {
mDbHelper.close();
}
public long createNote(String title, String body) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_BODY, body);
return mDb.insert(DATABASE_TABLE, null, initialValues);
}
public boolean deleteNote(long rowId) {
return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
public Cursor fetchAllNotes() {
return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,
KEY_BODY}, null, null, null, null, null);
}
public Cursor fetchNote(long rowId) throws SQLException {
Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public boolean updateNote(long rowId, String title, String body) {
ContentValues args = new ContentValues();
args.put(KEY_TITLE, title);
args.put(KEY_BODY, body);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}
I figured out how to fix this problem. I added the following code in the Tab1 class:
private DbAdapter mDbHelper;and then added this in the onCreate method
And finally ereased everything out of the onClick method and put in:
Also to close the database I created onDestroy method and called