TheDude
TheDude

Reputation: 135

Android database update not working

This is my databasehelper:

public class PersonDatabaseHelper {

private static final String TAG = PersonDatabaseHelper.class.getSimpleName();

// database configuration
// if you want the onUpgrade to run then change the database_version
private static final int DATABASE_VERSION = 7;
private static final String DATABASE_NAME = "database.db";

// table configuration
 static final String TABLE_NAME = "person_table";         // Table name
 static final String PERSON_TABLE_COLUMN_ID = "_id";     // a column named "_id" is required for cursor
 static final String PERSON_TABLE_COLUMN_NAME = "person_name";
 static final String PERSON_TABLE_COLUMN_SURNAME = "person_surname";
 static final String PERSON_TABLE_COLUMN_ENTERDATE = "person_enterdate";
 static final String PERSON_TABLE_COLUMN_ENTERTIME = "person_entertime";
 static final String PERSON_TABLE_COLUMN_EXITDATE = "person_exitdate";
 static final String PERSON_TABLE_COLUMN_EXITTIME = "person_exittime";

private DatabaseOpenHelper openHelper;
private SQLiteDatabase database;

// this is a wrapper class. that means, from outside world, anyone will communicate with PersonDatabaseHelper,
// but under the hood actually DatabaseOpenHelper class will perform database CRUD operations 
public PersonDatabaseHelper(Context aContext) {

    openHelper = new DatabaseOpenHelper(aContext);
    database = openHelper.getWritableDatabase();
}

public void insertData (String aPersonName, String aPersonSurName, String aPersonEnterDate,String aPersonEnterTime, String aPersonExitDate,String aPersonExitTime) {

    // we are using ContentValues to avoid sql format errors

    ContentValues contentValues = new ContentValues();

    contentValues.put(PERSON_TABLE_COLUMN_NAME, aPersonName);
    contentValues.put(PERSON_TABLE_COLUMN_SURNAME, aPersonSurName);
    contentValues.put(PERSON_TABLE_COLUMN_ENTERDATE, aPersonEnterDate);
    contentValues.put(PERSON_TABLE_COLUMN_ENTERTIME, aPersonEnterTime);
    contentValues.put(PERSON_TABLE_COLUMN_EXITDATE, aPersonExitDate);
    contentValues.put(PERSON_TABLE_COLUMN_EXITTIME, aPersonExitTime);

    database.insert(TABLE_NAME, null, contentValues);

}

      public void update_byID(int id, String name, String surname, String enterDate, String enterTime,String exitDate,String exitTime){
      ContentValues values = new ContentValues();
      values.put(PERSON_TABLE_COLUMN_NAME, name);
      values.put(PERSON_TABLE_COLUMN_SURNAME, surname);
      values.put(PERSON_TABLE_COLUMN_ENTERDATE, enterDate);
      values.put(PERSON_TABLE_COLUMN_ENTERTIME, enterTime);
      values.put(PERSON_TABLE_COLUMN_EXITDATE, exitDate);
      values.put(PERSON_TABLE_COLUMN_EXITTIME, exitTime);
      database.update(TABLE_NAME, values, PERSON_TABLE_COLUMN_ID+"="+id, null);
     }


    public Cursor getAllData () {

    String buildSQL = "SELECT * FROM " + TABLE_NAME;

    Log.d(TAG, "getAllData SQL: " + buildSQL);

    return database.rawQuery(buildSQL, null);
}


// this DatabaseOpenHelper class will actually be used to perform database related operation 

private class DatabaseOpenHelper extends SQLiteOpenHelper {

       public DatabaseOpenHelper(Context aContext) {
        super(aContext, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        // Create your tables here

        String buildSQL = "CREATE TABLE " + TABLE_NAME + "( " + PERSON_TABLE_COLUMN_ID + " INTEGER PRIMARY KEY, " +
                PERSON_TABLE_COLUMN_NAME + " TEXT, " + PERSON_TABLE_COLUMN_SURNAME + " TEXT, " + PERSON_TABLE_COLUMN_ENTERDATE + " TEXT," + PERSON_TABLE_COLUMN_ENTERTIME + " TEXT," + PERSON_TABLE_COLUMN_EXITDATE + " TEXT," + PERSON_TABLE_COLUMN_EXITTIME + " TEXT )";

        Log.d(TAG, "onCreate SQL: " + buildSQL);

        sqLiteDatabase.execSQL(buildSQL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        // Database schema upgrade code goes here

        String buildSQL = "DROP TABLE IF EXISTS " + TABLE_NAME;

        Log.d(TAG, "onUpgrade SQL: " + buildSQL);

        sqLiteDatabase.execSQL(buildSQL);       // drop previous table

        onCreate(sqLiteDatabase);               // create the table from the beginning
    }
     }

And my list class:

 public class List extends ActionBarActivity{

private CustomCursorAdapter customAdapter;
private PersonDatabaseHelper databaseHelper;
private static final int ENTER_DATA_REQUEST_CODE = 1;
private ListView listView;

private static final String TAG = List.class.getSimpleName();

/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listview);

    databaseHelper = new PersonDatabaseHelper(this);

    listView = (ListView) findViewById(R.id.list_data);
    listView.setOnItemClickListener(new OnItemClickListener() {



        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d(TAG, "clicked on item: " + position);



                Intent intent = new Intent(List.this, Edit.class);
                Person p = new Person();
                Cursor cursor = (Cursor) customAdapter.getItem(position);
                p.name = cursor.getString(cursor.getColumnIndex("person_name"));
                p.surname = cursor.getString(cursor.getColumnIndex("person_surname"));
                p.enterDate = cursor.getString(cursor.getColumnIndex("person_enterdate"));
                p.enterTime = cursor.getString(cursor.getColumnIndex("person_entertime"));
                p.exitDate = cursor.getString(cursor.getColumnIndex("person_exitdate"));
                p.exitTime = cursor.getString(cursor.getColumnIndex("person_exittime"));


                intent.putExtra("update_id", position);                               
                intent.putExtra("name",p.name);
                intent.putExtra("surname",p.surname );
                intent.putExtra("enterdate",p.enterDate );
                intent.putExtra("entertime",p.enterTime);
                intent.putExtra("exitdate", p.exitDate);
                intent.putExtra("exittime", p.exitTime);

                startActivity(intent);

        }
    });
    listView.setOnLongClickListener(new OnLongClickListener() {


        @Override
        public boolean onLongClick(View v) {
            return false;
            // TODO Auto-generated method stub


        }
    }); 
    // Database query can be a time consuming task ..
    // so its safe to call database query in another thread
    // Handler, will handle this stuff for you <img src="http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif?m=1129645325g" alt=":)" class="wp-smiley">

    new Handler().post(new Runnable() {
        @Override
        public void run() {
            customAdapter = new CustomCursorAdapter(List.this, databaseHelper.getAllData());
            listView.setAdapter(customAdapter);
        }
    });
}

     public void onClickEnterData(View btnAdd) {

      startActivityForResult(new Intent(this, Permission.class), ENTER_DATA_REQUEST_CODE);

}

    public void onClickLogOut(View btnLogOut){
   Intent intent = new Intent(List.this,
           MainActivity.class);
   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   startActivity(intent);
    }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {

        databaseHelper.insertData(data.getExtras().getString("tag_person_name"), data.getExtras().getString("tag_person_surname"),data.getExtras().getString("tag_person_enterdate"),data.getExtras().getString("tag_person_entertime"),data.getExtras().getString("tag_person_exitdate"),data.getExtras().getString("tag_person_exittime"));

        customAdapter.changeCursor(databaseHelper.getAllData());
    }
    if(resultCode == RESULT_FIRST_USER){
         databaseHelper.update_byID(data.getExtras().getInt("update_id"),data.getExtras().getString("update_person_name"), data.getExtras().getString("update_person_surname"),data.getExtras().getString("update_person_enterdate"),data.getExtras().getString("update_person_entertime"),data.getExtras().getString("update_person_exitdate"),data.getExtras().getString("update_person_exittime"));

         customAdapter.changeCursor(databaseHelper.getAllData());
    }
     }

And my Edit class where handle update button wich is defined by onClickSave:

 public class Edit extends ActionBarActivity {

EditText name;
EditText surName;
EditText date;
EditText time;
EditText eDate;
EditText eTime;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit);


    Intent intent = getIntent();
     String data_name = intent.getStringExtra("name");
     String data_surname = intent.getStringExtra("surname");
     String data_enterdate= intent.getStringExtra("enterdate");
     String data_entertime = intent.getStringExtra("entertime");
     String data_exitdate = intent.getStringExtra("exitdate");
     String data_exittime = intent.getStringExtra("exittime"); //typo here


     name = (EditText) findViewById(R.id.username); //corrected
     surName = (EditText) findViewById(R.id.usersurname); //corrected
     date = (EditText) findViewById(R.id.date2);
     time = (EditText) findViewById(R.id.time2);
     eDate = (EditText) findViewById(R.id.date3);
     eTime = (EditText) findViewById(R.id.time3);

     name.setText(data_name);
     surName.setText(data_surname);
     date.setText(data_enterdate);
     time.setText(data_entertime);
     eDate.setText(data_exitdate);
     eTime.setText(data_exittime);
}

public void onCancel(View btnCancel){
finish();
 }
 public void onClickSave(View btnSave){
        String personName = name.getText().toString();
        String personSurName = surName.getText().toString();
        String personEnterDate = date.getText().toString();
        String personEnterTime = time.getText().toString();
        String personExitDate = eDate.getText().toString();
        String personExitTime = eTime.getText().toString();
        if ( personName.length() != 0 && personSurName.length() != 0&& personEnterDate.length() != 0&& personEnterTime.length() != 0&& personExitDate.length() != 0&& personExitTime.length() != 0 ) {

            Intent newIntent = getIntent();
            newIntent.putExtra("update_person_name", personName);
            newIntent.putExtra("update_person_surname", personSurName);
            newIntent.putExtra("update_person_enterdate", personEnterDate);
            newIntent.putExtra("update_person_entertime", personEnterTime);
            newIntent.putExtra("update_person_exitdate", personExitDate);
            newIntent.putExtra("updateperson_exittime", personExitTime);

            this.setResult(RESULT_FIRST_USER, newIntent);

            finish();
        }else {
            AlertDialog alertDialog = new AlertDialog.Builder(Edit.this).create();
            alertDialog.setTitle("Alert");
            alertDialog.setMessage("Fill all columns");
            alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
            alertDialog.show();
        }
 }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.edit, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
  }

So the problem is that i am trying to update my selected item on list by calling edit class where i edit info and then by clicking onClickSave it updates the databse, i have all methods written but i dont get it whats wrong because its not updating and doing nothing. Even logcat not showing any signs of error. :( Pls someone help me :(

by now what i tried to do is to send strings to list activity with code RESULT_FIRST_USER, and in the List activity on protected void onActivityResult(int requestCode, int resultCode, Intent data), call update method from database.

also my Person class:

public class Person {
int id;
String name;
String surname;
String enterDate;
String enterTime;
String exitDate;
String exitTime;
}

Upvotes: 0

Views: 52

Answers (1)

Bob Snyder
Bob Snyder

Reputation: 38309

In your List activity, when the user clicks on a list item and you send the item data to your Edit activity, instead of startActivity(), you must call startActivityForResult(). Then, when you store the edited data and call setResult() in onClickSave() of the Edit activity, the data will be passed to the onActivityResult() method of the List activity..

Upvotes: 1

Related Questions