Modify SQLiteAdapter.java, implement a method delete_byID(int id) to delete individual row using id.
- package com.exercise.AndroidSQLite;
- import android.content.ContentValues;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import android.database.sqlite.SQLiteDatabase.CursorFactory;
- public class SQLiteAdapter {
- public static final String MYDATABASE_NAME = "MY_DATABASE";
- public static final String MYDATABASE_TABLE = "MY_TABLE";
- public static final int MYDATABASE_VERSION = 1;
- public static final String KEY_ID = "_id";
- public static final String KEY_CONTENT1 = "Content1";
- public static final String KEY_CONTENT2 = "Content2";
- //create table MY_DATABASE (ID integer primary key, Content text not null);
- private static final String SCRIPT_CREATE_DATABASE =
- "create table " + MYDATABASE_TABLE + " ("
- + KEY_ID + " integer primary key autoincrement, "
- + KEY_CONTENT1 + " text not null, "
- + KEY_CONTENT2 + " text not null);";
- private SQLiteHelper sqLiteHelper;
- private SQLiteDatabase sqLiteDatabase;
- private Context context;
- public SQLiteAdapter(Context c){
- context = c;
- }
- public SQLiteAdapter openToRead() throws android.database.SQLException {
- sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
- sqLiteDatabase = sqLiteHelper.getReadableDatabase();
- return this;
- }
- public SQLiteAdapter openToWrite() throws android.database.SQLException {
- sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
- sqLiteDatabase = sqLiteHelper.getWritableDatabase();
- return this;
- }
- public void close(){
- sqLiteHelper.close();
- }
- public long insert(String content1, String content2){
- ContentValues contentValues = new ContentValues();
- contentValues.put(KEY_CONTENT1, content1);
- contentValues.put(KEY_CONTENT2, content2);
- return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues);
- }
- public int deleteAll(){
- return sqLiteDatabase.delete(MYDATABASE_TABLE, null, null);
- }
- public void delete_byID(int id){
- sqLiteDatabase.delete(MYDATABASE_TABLE, KEY_ID+"="+id, null);
- }
- public Cursor queueAll(){
- String[] columns = new String[]{KEY_ID, KEY_CONTENT1, KEY_CONTENT2};
- Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns,
- null, null, null, null, null);
- return cursor;
- }
- public class SQLiteHelper extends SQLiteOpenHelper {
- public SQLiteHelper(Context context, String name,
- CursorFactory factory, int version) {
- super(context, name, factory, version);
- }
- @Override
- public void onCreate(SQLiteDatabase db) {
- // TODO Auto-generated method stub
- db.execSQL(SCRIPT_CREATE_DATABASE);
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // TODO Auto-generated method stub
- }
- }
- }
Modify AndroidSQLite.java to implement a custom AlertDialog to handle the ui, call delete_byID(int id) to delete row.
- package com.exercise.AndroidSQLite;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.database.Cursor;
- import android.os.Bundle;
- import android.view.View;
- import android.view.ViewGroup.LayoutParams;
- import android.widget.AdapterView;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.LinearLayout;
- import android.widget.ListView;
- import android.widget.SimpleCursorAdapter;
- import android.widget.TextView;
- public class AndroidSQLite extends Activity {
- EditText inputContent1, inputContent2;
- Button buttonAdd, buttonDeleteAll;
- private SQLiteAdapter mySQLiteAdapter;
- ListView listContent;
- SimpleCursorAdapter cursorAdapter;
- Cursor cursor;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- inputContent1 = (EditText)findViewById(R.id.content1);
- inputContent2 = (EditText)findViewById(R.id.content2);
- buttonAdd = (Button)findViewById(R.id.add);
- buttonDeleteAll = (Button)findViewById(R.id.deleteall);
- listContent = (ListView)findViewById(R.id.contentlist);
- mySQLiteAdapter = new SQLiteAdapter(this);
- mySQLiteAdapter.openToWrite();
- cursor = mySQLiteAdapter.queueAll();
- String[] from = new String[]{SQLiteAdapter.KEY_ID, SQLiteAdapter.KEY_CONTENT1, SQLiteAdapter.KEY_CONTENT2};
- int[] to = new int[]{R.id.id, R.id.text1, R.id.text2};
- cursorAdapter =
- new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);
- listContent.setAdapter(cursorAdapter);
- listContent.setOnItemClickListener(listContentOnItemClickListener);
- buttonAdd.setOnClickListener(buttonAddOnClickListener);
- buttonDeleteAll.setOnClickListener(buttonDeleteAllOnClickListener);
- }
- Button.OnClickListener buttonAddOnClickListener
- = new Button.OnClickListener(){
- @Override
- public void onClick(View arg0) {
- // TODO Auto-generated method stub
- String data1 = inputContent1.getText().toString();
- String data2 = inputContent2.getText().toString();
- mySQLiteAdapter.insert(data1, data2);
- updateList();
- }
- };
- Button.OnClickListener buttonDeleteAllOnClickListener
- = new Button.OnClickListener(){
- @Override
- public void onClick(View arg0) {
- // TODO Auto-generated method stub
- mySQLiteAdapter.deleteAll();
- updateList();
- }
- };
- private ListView.OnItemClickListener listContentOnItemClickListener
- = new ListView.OnItemClickListener(){
- @Override
- public void onItemClick(AdapterView parent, View view, int position,
- long id) {
- // TODO Auto-generated method stub
- Cursor cursor = (Cursor) parent.getItemAtPosition(position);
- final int item_id = cursor.getInt(cursor.getColumnIndex(SQLiteAdapter.KEY_ID));
- String item_content1 = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.KEY_CONTENT1));
- String item_content2 = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.KEY_CONTENT2));
- AlertDialog.Builder myDialog
- = new AlertDialog.Builder(AndroidSQLite.this);
- myDialog.setTitle("Delete?");
- TextView dialogTxt_id = new TextView(AndroidSQLite.this);
- LayoutParams dialogTxt_idLayoutParams
- = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- dialogTxt_id.setLayoutParams(dialogTxt_idLayoutParams);
- dialogTxt_id.setText("#" + String.valueOf(item_id));
- TextView dialogC1_id = new TextView(AndroidSQLite.this);
- LayoutParams dialogC1_idLayoutParams
- = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- dialogC1_id.setLayoutParams(dialogC1_idLayoutParams);
- dialogC1_id.setText(item_content1);
- TextView dialogC2_id = new TextView(AndroidSQLite.this);
- LayoutParams dialogC2_idLayoutParams
- = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- dialogC2_id.setLayoutParams(dialogC2_idLayoutParams);
- dialogC2_id.setText(item_content2);
- LinearLayout layout = new LinearLayout(AndroidSQLite.this);
- layout.setOrientation(LinearLayout.VERTICAL);
- layout.addView(dialogTxt_id);
- layout.addView(dialogC1_id);
- layout.addView(dialogC2_id);
- myDialog.setView(layout);
- myDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
- // do something when the button is clicked
- public void onClick(DialogInterface arg0, int arg1) {
- mySQLiteAdapter.delete_byID(item_id);
- updateList();
- }
- });
- myDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
- // do something when the button is clicked
- public void onClick(DialogInterface arg0, int arg1) {
- }
- });
- myDialog.show();
- }};
- @Override
- protected void onDestroy() {
- // TODO Auto-generated method stub
- super.onDestroy();
- mySQLiteAdapter.close();
- }
- private void updateList(){
- cursor.requery();
- }
- }
All other files, main.xml and row.xml, follow the last exercise.
No comments:
Post a Comment