Jun'z
Jun'z

Reputation: 67

Android: Update

I've been working with my App which is the the Android Quiz. This app can add, delete, search, view and update data. Update is the only problem I have. Before the user can update, users will only search for the Id of the Data then it will load on the EditText, and when I click the update button, Toast message will only show "Successfully Updated" but the data on the sqlite nothing happened or change. Please check my codes thank you so much.

My DatabaseHelper class:

Create Table:

 private static final String CREATE_QUERY = "CREATE TABLE "+ AdminContact.Question.TABLE_QUIZ+"("+ AdminContact.Question.ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+ AdminContact.Question.COLUMN_QUESTION+" TEXT NOT NULL,"+
            AdminContact.Question.COLUMN_ANSWER1+" TEXT NOT NULL,"+ AdminContact.Question.COLUMN_ANSWER2+" TEXT NOT NULL,"+ AdminContact.Question.COLUMN_ANSWER3+" TEXT NOT NULL,"+ AdminContact.Question.COLUMN_ANSWER4+" TEXT NOT NULL);";

My update:

public void updateData(long ID, String new_question, String new_ans1, String new_ans2, String new_ans3, String new_ans4, SQLiteDatabase sqLiteDatabase) {

        ContentValues contentValues = new ContentValues();
        contentValues.put(AdminContact.Question.COLUMN_QUESTION, new_question);
        contentValues.put(AdminContact.Question.COLUMN_ANSWER1, new_ans1);
        contentValues.put(AdminContact.Question.COLUMN_ANSWER2, new_ans2);
        contentValues.put(AdminContact.Question.COLUMN_ANSWER3, new_ans3);
        contentValues.put(AdminContact.Question.COLUMN_ANSWER4, new_ans4);


        sqLiteDatabase.update(AdminContact.Question.TABLE_QUIZ, contentValues, AdminContact.Question.ID + "=" + ID, null);

        return;
    }

My Update class:

    EditText Search_Id, New_Question, New_Ans1, New_Ans2, New_Ans3, New_Ans4;
    DatabaseHelper helper;
    String SearchID, NewId, NewQuestion, NewAns1, NewAns2, NewAns3, NewAns4;
    SQLiteDatabase sqLiteDatabase;
    TextView title_text;
    Button updateButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update_contact);
        helper = new DatabaseHelper(this);

        Search_Id = (EditText) findViewById(R.id.id_search);
        New_Question = (EditText) findViewById(R.id.new_question);
        New_Ans1 = (EditText) findViewById(R.id.new_ans1);
        New_Ans2 = (EditText) findViewById(R.id.new_ans2);
        New_Ans3 = (EditText) findViewById(R.id.new_ans3);
        New_Ans4 = (EditText) findViewById(R.id.new_ans4);
        title_text = (TextView) findViewById(R.id.title_text);
        updateButton = (Button) findViewById(R.id.update_button);
        New_Question.setVisibility(View.GONE);
        New_Ans4.setVisibility(View.GONE);
        New_Ans3.setVisibility(View.GONE);
        New_Ans2.setVisibility(View.GONE);
        New_Ans1.setVisibility(View.GONE);
        title_text.setVisibility(View.GONE);
        updateButton.setVisibility(View.GONE);


    }

    public void searchContact(View view) {

    SearchID = Search_Id.getText().toString();
    helper = new DatabaseHelper(this);
    sqLiteDatabase = helper.getReadableDatabase();
    Cursor cursor = helper.getData(SearchID, sqLiteDatabase);
    if (cursor.moveToFirst()) {
        NewQuestion = cursor.getString(0);
        NewAns1 = cursor.getString(1);
        NewAns2 = cursor.getString(2);
        NewAns3 = cursor.getString(3);
        NewAns4 = cursor.getString(4);
        NewId = SearchID;

        New_Question.setText(NewQuestion);
        New_Ans1.setText(NewAns1);
        New_Ans2.setText(NewAns2);
        New_Ans3.setText(NewAns3);
        New_Ans4.setText(NewAns4);
        New_Ans4.setVisibility(View.VISIBLE);
        New_Ans3.setVisibility(View.VISIBLE);
        New_Ans2.setVisibility(View.VISIBLE);
        New_Ans1.setVisibility(View.VISIBLE);
        New_Question.setVisibility(View.VISIBLE);
        title_text.setVisibility(View.VISIBLE);
        updateButton.setVisibility(View.VISIBLE);

    }

}


public void updateData(View view)
{
    helper = new DatabaseHelper(this);
    sqLiteDatabase = helper.getWritableDatabase();

    String question, ans1, ans2, ans3, ans4;

    question = New_Question.getText().toString();
    ans1 = New_Ans1.getText().toString();
    ans2 = New_Ans2.getText().toString();
    ans3 = New_Ans3.getText().toString();
    ans4 = New_Ans4.getText().toString();

    int ID = 0;
    helper.updateData(ID,question,ans1,ans2,ans3,ans4,sqLiteDatabase);
    Toast.makeText(getApplicationContext(),"Successfully Updated", Toast.LENGTH_LONG).show();
    finish();

}

Upvotes: 0

Views: 92

Answers (1)

Bö macht Blau
Bö macht Blau

Reputation: 13019

In your 'update' statement

sqLiteDatabase.update(AdminContact.Question.TABLE_QUIZ, contentValues, AdminContact.Question.ID + "=" + ID, null);

you want to update only rows with matching ID.

So each time you execute the following lines in your updateData() method

int ID = 0;

helper.updateData(ID,question,ans1,ans2,ans3,ans4,sqLiteDatabase);

you are updating the row with ID = 0.

To find out whether you updated anything you can check the return value of the sqLiteDatabase.update() method: it will give you the number of updated rows.

See also this link to documentation

Upvotes: 1

Related Questions