Chào các bạn, trong bài hướng dẫn hôm nay chúng ta cùng thực hiện chức năng cho màn hình Login nhé!
Các bạn có thể tham khảo các [Android Nâng Cao] Ứng dụng chat với Firebase phần khác tại đây nhé!
- [Android Nâng Cao] Ứng dụng Chat với Firebase – Phần 1
- [Android Nâng Cao] Ứng dụng Chat với Firebase – Phần 2
- [Android Nâng Cao] Ứng dụng Chat với Firebase – Phần 3
- [Android Nâng Cao] Ứng dụng Chat với Firebase – Phần 5
- [Android Nâng Cao] Ứng dụng Chat với Firebase – Phần 6
Trên màn hình Login các bạn bắt sự kiện click vào nút Sign In với nội dung code xử lý theo logic sau :
- Lấy dữ liệu người dùng nhập từ 2 Edittext và kiểm tra
- Gửi dữ liệu lên Firebase Database Realtime đã kết nối ở bài trước xem thông tin user có tồn tại không
- Kiểm tra dữ liệu trả về của Firebase và thông báo tới người dùng
- Nếu thành công thì mở màn hình Home, ngược lại thông báo lỗi tới người dùng bằng Toast hoặc AlertDialog
Câu lệnh xử lý Login tương tự như Sign Up. Chúng ta có thể thấy mô tả thông qua sơ đồ như sau :
Chi tiết câu lệnh như sau :
public void signIn(View view) {
final String username = edtUsername.getText().toString();
final String password = edtPassword.getText().toString();
// câu lệnh kiểm tra dữ liệu, cắt khoảng trắng 2 đầu dữ liệu học viên // tự luyện tập
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
// truy vấn vào nhánh username mà người dùng nhập
DatabaseReference users = firebaseDatabase.getReference(USERS).child(username);
users.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() == null) {
Toast.makeText(LoginActivity.this,
getString(R.string.notify_user_is_not_exists), Toast.LENGTH_SHORT).show();
} else {
// lấy dữ liệu từ dataSnapshot gán vào model User,
// lưu ý : biến ở User cần trùng khớp với tên các giá trị trên firebase
User user = dataSnapshot.getValue(User.class);
// so sánh mật khẩu người dùng nhập và dữ liệu trên firebase
if (user.password.equals(password)) {
startActivity(new Intent(LoginActivity.this, HomeActivity.class));
} else {
// thông báo sai mật khẩu
Toast.makeText(LoginActivity.this, getString(R.string.notify_wrong_password), Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
*Lưu ý : ở màn hình Login thường có chức năng Remember Password và nhớ trạng thái đăng nhập. Để thực hiện chức năng này các bạn cần tự triển khai 1 class sử dụng SharedPreference hoặc 1 cơ chế lưu dữ liệu khác. Phần này a sẽ viết bài mô tả riêng nhé!
Link code mẫu bài 4 : https://github.com/huuhuybn/Messaggio
Nguồn: Giảng viên Nguyễn Hữu Huy – Bộ môn Công nghệ thông tin Trường Cao đẳng FPT Polytechnic