Tạo ứng dụng Android thêm, sửa, xoá với CSDL SQLite
Tạo ứng dụng Android thêm, sửa, xoá với CSDL SQLite

Giới thiệu

SQLite là một hệ quản trị cơ sở dữ liệu trên Android giúp các nhà phát triển ứng dụng lưu dữ liệu cục bộ trên bộ nhớ thiết bị ở dạng có cấu trúc, giúp dễ dàng đọc, cập nhật hoặc xóa dữ liệu được lưu ở nhiều định dạng khác nhau.

Android SQLite là cách tốt nhất để lưu dữ liệu cục bộ trên chính thiết bị.

SQLite hoạt động như một database cục bộ cho các ứng dụng lưu dữ liệu theo cấu trúc hàng cột truyền thống. Nó phù hợp khi dữ liệu lưu trữ theo dạng bảng, chẳng hạn như dữ liệu người dùng, dữ liệu sách, dữ liệu nhân viên, v.v.

Chúng ta sẽ triển khai phát triển ứng dụng với SQLite bắt đầu bằng việc sử dụng API của gói android.database.sqlite .

Bạn có thể xem thêm những giới hạn của SQLite tại đây Xem thêm Khoá học lập trình với Android.

Trong bài này, tôi sẽ tạo một ứng dụng mẫu, sẽ diễn giải một số chức năng cơ bản để thao tác với các bảng trong Database như Insert, Delete Update, Remove All Table, Get Rows Count Get All Rows được lưu trong Table.

Trước khi bắt đầu, chúng ta cùng xem một số hình ảnh demo của ứng dụng chúng ta sẽ phát triển.

Chương trình quản lý UserYêu cầu

Tạo một cơ sở dữ liệu trong SQLite, trong đó có bảng: USERS(ID integer primary key autoincrement,user_name text,user_phone text,user_email text)

Viết ứng dụng trong Android thực hiện các công việc:

  • Thêm mới người sử dụng
  • Sửa người sử dụng đã chọn
  • Xoá người sử dụng được chọn
  • Đếm số lượng người sử dụng
  • Xoá toàn bộ người sử dụng

Bước 1) Mở Android Studio và tạo một project mới, chọn loại project là Empty Activity

Tạo mới dự án Android.

Bước 2) Tạo một lớp UserModel để getset các dữ liệu cho bảng User.

UserModel.java

public class UserModel { String ID,username,phone,email; public String getID() { return ID; } public void setID(String ID) { this.ID = ID; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getUserphone() { return phone; } public void setUserphone(String phone) { this.phone = phone; } public String getUseremail() { return email; } public void setUseremail(String email) { this.email = email; } }

Bước 3) Viết lớp Utils để hiển thị thông báo

public class Utils { public static void showToast(Context context, String msg) { Toast toast = Toast.makeText(context, msg, Toast.LENGTH_LONG); toast.show(); } }

Bước 4) Tạo lớp UsersDatabaseAdapter thực thi các phương thức thao tác với Database như Insert, Update, Delete, v.v.

public class UsersDatabaseAdapter { static ArrayList<UserModel> users=new ArrayList<>(); static final String DATABASE_NAME = “UsersDatabase.db”; static final String TABLE_NAME = “USERS”; static final int DATABASE_VERSION = 1; // Câu lệnh SQL tạo mới cơ sở dữ liệu. static final String DATABASE_CREATE = “create table “+TABLE_NAME+”( ID integer primary key autoincrement,user_name text,user_phone text,user_email text); “; private static final String TAG = “UsersDatabaseAdapter”; // Khai báo biên db kiểm SQLiteDatabase để thực thi các phương thức với cơ sở dữ liệu public static SQLiteDatabase db; // Khai báo đối tượng kiểu Context của ứng dụng sử dụng cơ sở dữ liệu này. private final Context context; // Database open/upgrade helper private static DataBaseHelper dbHelper; public UsersDatabaseAdapter(Context _context) { context = _context; dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION); } // Phương thức mở Database public UsersDatabaseAdapter open() throws SQLException { db = dbHelper.getWritableDatabase(); return this; } // Phương thức đóng Database public void close() { db.close(); } // Phương thức trả về instance của Database public SQLiteDatabase getDatabaseInstance() { return db; } // Phương thức insert bản ghi vào Table public String insertEntry(String user_name, String user_phone, String user_email) { try { ContentValues newValues = new ContentValues(); // Gán dữ liệu cho mỗi cột. newValues.put(“user_name”, user_name); newValues.put(“user_phone”, user_phone); newValues.put(“user_email”, user_email); // Insert hàng dữ liệu vào table db = dbHelper.getWritableDatabase(); long result=db.insert(TABLE_NAME, null, newValues); Log.i(“Row Insert Result “, String.valueOf(result)); Utils.showToast(this.context.getApplicationContext(), “User Info Saved! Total Row Count is “+getRowCount()); db.close(); }catch(Exception ex) { } return “ok”; } // Phương thức lấy tất cả các hàng được lưu trong Table public static ArrayList<UserModel> getRows() throws JSONException { users.clear(); UserModel user; db=dbHelper.getReadableDatabase(); Cursor projCursor = db.query(TABLE_NAME, null, null,null, null, null, null,null); while (projCursor.moveToNext()) { user=new UserModel(); user.setID(projCursor.getString(projCursor.getColumnIndex(“ID”))); user.setUsername(projCursor.getString(projCursor.getColumnIndex(“user_name”))); user.setUserphone(projCursor.getString(projCursor.getColumnIndex(“user_phone”))); user.setUseremail(projCursor.getString(projCursor.getColumnIndex(“user_email”))); users.add(user); } projCursor.close(); return users; } // phương thức xoá bản ghi trong Table sủw dụng khoá chính là ID public int deleteEntry(String ID) { String where=”ID=?”; int numberOFEntriesDeleted= db.delete(TABLE_NAME, where, new String[]{ID}) ; Toast.makeText(this.context.getApplicationContext(),”Number fo Entry Deleted Successfully : “+numberOFEntriesDeleted, Toast.LENGTH_SHORT).show(); return numberOFEntriesDeleted; } // Phương thức đếm tổng số bản ghi trong Table public int getRowCount() { db=dbHelper.getReadableDatabase(); Cursor cursor=db.query(TABLE_NAME, null, null, null, null, null, null); Toast.makeText(this.context.getApplicationContext(),”Row Count is “+cursor.getCount(),Toast.LENGTH_LONG).show(); db.close(); return cursor.getCount(); } // Phương thức xoá tất cả các bản ghi trong bảng Table public void truncateTable() { db=dbHelper.getReadableDatabase(); db.delete(TABLE_NAME, “1”, null); db.close(); Toast.makeText(context.getApplicationContext(),”Table Data Truncated!”,Toast.LENGTH_LONG).show(); } // Phương thức Update các bản ghi trong Table public void updateEntry(String ID,String Username, String Userphone, String Useremail) { ContentValues updatedValues = new ContentValues(); updatedValues.put(“user_name”, Username); updatedValues.put(“user_phone”, Userphone); updatedValues.put(“user_email”, Useremail); String where=”ID = ?”; db=dbHelper.getReadableDatabase(); db.update(TABLE_NAME,updatedValues, where, new String[]{ID}); db.close(); Toast.makeText(context.getApplicationContext(),”Row Updated!”,Toast.LENGTH_LONG).show(); } }

Bước 5) Kế tiếp tạo một lớp DataBaseHelper được kế thừa từ lớp SQLiteOpenHelper, đây là lớp helper quản lý tạo database và quản lý phiên bản.

package timoday.edu.vn.quanlyuser; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import static timoday.edu.vn.manageuser.UsersDatabaseAdapter.TABLE_NAME; public class DataBaseHelper extends SQLiteOpenHelper { public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase _db) { try { _db.execSQL(UsersDatabaseAdapter.DATABASE_CREATE); }catch(Exception er){ Log.e(“Error”,”exceptioin”); } } @Override public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) { _db.execSQL(“DROP TABLE IF EXISTS ” + TABLE_NAME); _db.execSQL(“DROP TABLE IF EXISTS ” + “SEMESTER1”); // Tạo một database mới. onCreate(_db); } }

Bước 6) Viết code cho MainActivity, tạo một đối tượng kiểu UsersDatabaseAdapter để tạo DATABASE và TABLE.

Bước 6.1) Giao diện activity_main.xml sau khi thêm các button

<?xml version=”1.0″ encoding=”utf-8″?> <android.support.constraint.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:app=”http://schemas.android.com/apk/res-auto” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_gravity=”center_horizontal” android:layout_marginTop=”20dp” tools:context=”.MainActivity”> <TableLayout android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:gravity=”center_vertical|center_horizontal”> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <ImageView android:id=”@+id/imageView” android:layout_width=”match_parent” android:layout_height=”60dp” android:layout_marginBottom=”10dp” android:layout_marginTop=”8dp” app:layout_constraintTop_toTopOf=”parent” app:srcCompat=”@drawable/freakyjollylogo” tools:layout_editor_absoluteX=”8dp” android:onClick=”goToUrl”/> </TableRow> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <Button android:id=”@+id/insertRow” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_marginBottom=”10dp” android:onClick=”insertRowActivity” android:text=”Insert User” /> </TableRow> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <Button android:id=”@+id/updateRowView” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_marginBottom=”10dp” android:onClick=”updateRowView” android:text=”Update User” /> </TableRow> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <Button android:id=”@+id/deleteRow” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_marginBottom=”10dp” android:onClick=”deleteRowActivity” android:text=”Delete User” /> </TableRow> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <Button android:id=”@+id/rowCount” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_marginBottom=”10dp” android:onClick=”rowCount” android:text=”Count User” /> </TableRow> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <Button android:id=”@+id/truncateTable” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_marginBottom=”10dp” android:onClick=”truncateTable” android:text=”Remove All User” /> </TableRow> </TableLayout> </android.support.constraint.ConstraintLayout>

Chương trình quản lý User

Bước 6.2) Code MainActitity.java

Khai báo một đối tượng usersDatabaseAdapter bên ngoài phương thức onCreate

UsersDatabaseAdapter usersDatabaseAdapter;

Sau đó hoàn thiện code như bên dưới:

public class MainActivity extends AppCompatActivity { UsersDatabaseAdapter usersDatabaseAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // create the instance of Databse usersDatabaseAdapter=new UsersDatabaseAdapter(getApplicationContext()); } //open activity to Insert new rows in table public void insertRowActivity(View view) { Intent myIntent = new Intent(MainActivity.this, InsertRowActivity.class); MainActivity.this.startActivity(myIntent); } //Open activity to update rows public void updateRowView(View view) { Intent myIntent = new Intent(MainActivity.this, UpdateRowsActivity.class); MainActivity.this.startActivity(myIntent); } //call method to show rows count in Toast public void rowCount(View view) { usersDatabaseAdapter.getRowCount(); } //Open activity to delete rows public void deleteRowActivity(View view) { Intent myIntent = new Intent(MainActivity.this, DeleteRowsActivity.class); MainActivity.this.startActivity(myIntent); } //Button method to truncate table rows public void truncateTable(View view) { usersDatabaseAdapter.truncateTable(); } //Open URL in browser public void goToUrl (View view) { String url = “https://timoday.edu.vn”; Uri uriUrl = Uri.parse(url); Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl); startActivity(launchBrowser); } }

Bước 7) Tạo các Activity và code cho thêm, sửa, xoá và hai ListView

Các Activitie bao gồm:

  1. activity_insert_row.xml
  2. activity_update_rows.xml
  3. activity_delete_rows.xml

Cách đề hêm một Activity mới: Kích chuột phải trên main package > New > Activity > Empty Activity

Chúng ta sẽ thêm phần giao diện sau đó sẽ viết phần code Activity.

Bước 7.1) Tạo giao diện activity_insert_row.xml

<?xml version=”1.0″ encoding=”utf-8″?> <android.support.constraint.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:app=”http://schemas.android.com/apk/res-auto” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_gravity=”center_horizontal” android:layout_marginTop=”20dp” tools:context=”.InsertRowActivity”> <TableLayout android:layout_width=”wrap_content” android:layout_height=”wrap_content”> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <EditText android:id=”@+id/userNameTxt” android:layout_width=”293dp” android:layout_height=”wrap_content” android:layout_marginBottom=”10dp” android:hint=”User Name” android:inputType=”textPersonName” /> </TableRow> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <EditText android:id=”@+id/userPhoneTxt” android:layout_width=”289dp” android:layout_height=”53dp” android:layout_marginBottom=”10dp” android:hint=”User Phone” android:inputType=”phone” /> </TableRow> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <EditText android:id=”@+id/userEmailTxt” android:layout_width=”291dp” android:layout_height=”59dp” android:layout_marginBottom=”10dp” android:hint=”User Email” android:inputType=”textEmailAddress” /> </TableRow> <TableRow android:layout_width=”match_parent” android:layout_height=”match_parent”> <Button android:id=”@+id/insertRowFrom” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:onClick=”insertRow” android:text=”Insert User” /> </TableRow> </TableLayout> </android.support.constraint.ConstraintLayout>

Giao diện thêm mới User

Bước 7.2) Code InsertRowActivity.java

public class InsertRowActivity extends AppCompatActivity { private TextView mUserName; private TextView mUserPhone; private TextView mUserEmail; private Button insertRowFrom; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_insert_row); insertRowFrom = (Button) findViewById(R.id.insertRowFrom); mUserName = (TextView) findViewById(R.id.userNameTxt); mUserPhone = (TextView) findViewById(R.id.userPhoneTxt); mUserEmail = (TextView) findViewById(R.id.userEmailTxt); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle(“Inser New User”); } } public void insertRow(View view) { TextView userNameTxtView = findViewById(R.id.userNameTxt); TextView userPhoneTxtView = findViewById(R.id.userPhoneTxt); TextView userEmailTxtView = findViewById(R.id.userEmailTxt); if(userNameTxtView.getText().toString().trim().equals(“”) || userPhoneTxtView.getText().toString().trim().equals(“”) || userEmailTxtView.getText().toString().trim().equals(“”)){ Utils.showToast(InsertRowActivity.this, “Please Fill All Fields “); }else{ UsersDatabaseAdapter usersDB = new UsersDatabaseAdapter(getApplicationContext()); usersDB.insertEntry(userNameTxtView.getText().toString().trim(),userPhoneTxtView.getText().toString(),userEmailTxtView.getText().toString()); Intent myIntent = new Intent(InsertRowActivity.this, MainActivity.class); InsertRowActivity.this.startActivity(myIntent); } } public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()) { case android.R.id.home: finish(); return true; } return super.onOptionsItemSelected(item); } public boolean onCreateOptionsMenu(Menu menu) { return true; } }

Trong InsertRowActivity chúng ta sẽ hiển thị một form với ba trường EditText và nút Submit để lưu các giá trị tới bảng sử dụng phương thức insertEntry của đối tượng UsersDatabaseAdapter

Bước 7.3) Giao diện activity_update_rows.xml

<?xml version=”1.0″ encoding=”utf-8″?> <android.support.constraint.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:app=”http://schemas.android.com/apk/res-auto” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent” android:layout_height=”match_parent” tools:context=”.UpdateRowsActivity”> <ListView android:id=”@+id/listupdateviewID” android:layout_width=”368dp” android:layout_height=”495dp” android:layout_margin=”10dp” android:padding=”10dp” tools:layout_editor_absoluteX=”8dp” tools:layout_editor_absoluteY=”8dp” /> </android.support.constraint.ConstraintLayout>

Giao diện Update User

Bước 7.4) Code UpdateRowsActivity.java

public class UpdateRowsActivity extends AppCompatActivity { static ListView listView ; ArrayList<UserModel> users=new ArrayList<>(); static CustomListAdapterUpdateRows updateAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_update_rows); try { UsersDatabaseAdapter usersDB = new UsersDatabaseAdapter(getApplicationContext()); users = usersDB.getRows(); } catch (JSONException e) { e.printStackTrace(); } updateAdapter = new CustomListAdapterUpdateRows(this, users); listView = (ListView) findViewById(R.id.listupdateviewID); listView.setAdapter(updateAdapter); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle(“Update User”); } } public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()) { case android.R.id.home: finish(); return true; } return super.onOptionsItemSelected(item); } public boolean onCreateOptionsMenu(Menu menu) { return true; } }

UpdateRowsActivity sẽ có ListView để hiển thị dữ liệu theo hàng và mỗi hàng sẽ có một nút Update để cập nhật dữ liệu trực tiếp theo từng hàng.

Bước 7.5) Giao diện activity_delete_rows.xml

<?xml version=”1.0″ encoding=”utf-8″?> <android.support.constraint.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:app=”http://schemas.android.com/apk/res-auto” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent” android:layout_height=”match_parent” tools:context=”.deleteRowsActivity”> <ListView android:id=”@+id/listviewdeleteID” android:layout_width=”368dp” android:layout_height=”495dp” android:layout_margin=”10dp” android:padding=”10dp” tools:layout_editor_absoluteX=”8dp” tools:layout_editor_absoluteY=”8dp” /> </android.support.constraint.ConstraintLayout>

Giao diện xoá UserBước 7.6) DeleteRowsActivity.java

public class DeleteRowsActivity extends AppCompatActivity { ListView listView ; ArrayList<UserModel> users=new ArrayList<>(); static CustomListAdapterDeleteRows deleteAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_delete_rows); try { users = UsersDatabaseAdapter.getRows(); } catch (JSONException e) { e.printStackTrace(); } deleteAdapter = new CustomListAdapterDeleteRows(this, users); listView = (ListView) findViewById(R.id.listviewdeleteID); listView.setAdapter(deleteAdapter); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle(“Delete Row from SQLite”); } } public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()) { case android.R.id.home: finish(); return true; } return super.onOptionsItemSelected(item); } public boolean onCreateOptionsMenu(Menu menu) { return true; } }

Bây giờ chúng ta sẽ thêm hai layout chứa ListView

Cách để thêm danh sách Layout: Kích chuột phải vào thư mục layout trong res > New > Layout resource file

Bước 7.7) Giao diện listviewupdate_row.xml

<?xml version=”1.0″ encoding=”utf-8″?> <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent” android:layout_height=”wrap_content” android:orientation=”horizontal”> <EditText android:id=”@+id/editText1″ android:layout_width=”96dp” android:layout_height=”match_parent” android:layout_weight=”1″ android:text=”” /> <EditText android:id=”@+id/editText2″ android:layout_width=”64dp” android:layout_height=”match_parent” android:layout_weight=”1″ android:text=”” /> <EditText android:id=”@+id/editText3″ android:layout_width=”50dp” android:layout_height=”match_parent” android:layout_weight=”1″ android:text=”” /> <Button android:id=”@+id/updateBtn” android:layout_width=”41dp” android:layout_height=”match_parent” android:layout_weight=”1″ android:onClick=”deleteListRow” android:text=”Update” android:textSize=”10sp” /> </LinearLayout>

Đây là ListLayout cho activity Update theo hàng.

Bước 7.8) Giao diện listviewdelete_row.xml

<?xml version=”1.0″ encoding=”utf-8″?> <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent” android:layout_height=”wrap_content” android:orientation=”horizontal”> <TextView android:id=”@+id/textView1″ android:layout_width=”95dp” android:layout_height=”match_parent” android:layout_marginBottom=”10dp” android:layout_marginTop=”10dp” android:layout_weight=”1″ android:text=”TextView” /> <TextView android:id=”@+id/textView2″ android:layout_width=”83dp” android:layout_height=”match_parent” android:layout_marginBottom=”10dp” android:layout_marginTop=”10dp” android:layout_weight=”1″ android:text=”TextView” /> <TextView android:id=”@+id/textView3″ android:layout_width=”82dp” android:layout_height=”match_parent” android:layout_marginBottom=”10dp” android:layout_marginTop=”10dp” android:layout_weight=”1″ android:text=”TextView” /> <Button android:id=”@+id/button1″ android:layout_width=”40dp” android:layout_height=”match_parent” android:layout_weight=”1″ android:text=”Del” android:onClick=”deleteListRow”/> </LinearLayout>

Đây là layout cho Acivity Update

Bước 8) Code class CustomListAdapterUpdateRows CustomListAdapterDeleteRows hiển thị danh sách user trong ListViews cho UpdateDelete.

Bước 8.1) Code CustomListAdapterUpdateRows.java

public class CustomListAdapterUpdateRows extends BaseAdapter { Context c; ArrayList<UserModel> users; public CustomListAdapterUpdateRows(Context c, ArrayList<UserModel> users) { this.c = c; this.users = users; } @Override public int getCount() { return users.size(); } @Override public Object getItem(int i) { return users.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { if(view==null) { view= LayoutInflater.from(c).inflate(R.layout.listviewupdate_row,viewGroup,false); } final EditText meditText1 = (EditText) view.findViewById(R.id.editText1); final EditText meditText2 = (EditText) view.findViewById(R.id.editText2); final EditText meditText3 = (EditText) view.findViewById(R.id.editText3); Button updateBtn = (Button) view.findViewById(R.id.updateBtn); final UserModel user= (UserModel) this.getItem(i); meditText1.setText(user.getUsername()); meditText2.setText(user.getUserphone()); meditText3.setText(user.getUseremail()); updateBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { String col1value = meditText1.getText().toString(); String col2value = meditText2.getText().toString(); String col3value = meditText3.getText().toString(); UsersDatabaseAdapter usersDB = new UsersDatabaseAdapter(c); usersDB.updateEntry(user.getID(),col1value,col2value,col3value); } }); return view; } }

Bước 8.2) Code CustomListAdapterDeleteRows.java

public class CustomListAdapterDeleteRows extends BaseAdapter { Context c; ArrayList<UserModel> users; public CustomListAdapterDeleteRows(Context c, ArrayList<UserModel> users) { this.c = c; this.users = users; } @Override public int getCount() { return users.size(); } @Override public Object getItem(int i) { return users.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { if(view==null) { view=LayoutInflater.from(c).inflate(R.layout.listviewdelete_row,viewGroup,false); } TextView mtextView1 = (TextView) view.findViewById(R.id.textView1); TextView mtextView2 = (TextView) view.findViewById(R.id.textView2); TextView mtextView3 = (TextView) view.findViewById(R.id.textView3); Button deleteBtn = (Button) view.findViewById(R.id.button1); final UserModel user= (UserModel) this.getItem(i); mtextView1.setText(user.getUsername()); mtextView2.setText(user.getUserphone()); mtextView3.setText(user.getUseremail()); deleteBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { UsersDatabaseAdapter usersDB = new UsersDatabaseAdapter(c); usersDB.deleteEntry(user.getID()); users.remove(i); notifyDataSetChanged(); } }); return view; } }

Kết luận

Như vậy chúng ta đã hoàn thành toàn bộ các phần code giao diện và phần code lập trình cần thiết để ứng dụng quản lý người sử dụng có thể thực hiện. Bạn có thể xem thêm các dòng comment để hiểu thêm về các đoạn code.

Chúc các bạn thành công!

By Hà Phương

Với kinh nghiệm trên 7 năm trong lĩnh vực làm đẹp mình tạo nên EzBeauty là website chia sẻ kiến thức và thông tin cho mọi người!