[英]How to set error message if a child is missing in firebase using android studio
我正在制作一個關於能源監控的應用程序。 在我的注冊屏幕中,有四個編輯文本(全名、用戶名、電子郵件、密碼)將在注冊成功后發送/存儲到 Firebase。 數據將由子用戶名存儲(類似這樣)在此處輸入圖像描述
一個 esp32 連接到 firebase,它將在名為 totalEnergy 的用戶名下存儲一個孩子(這是一個 int 不是字符串)。 (類似這樣)在此處輸入圖像描述
在登錄屏幕中有 2 個編輯文本(用戶名、密碼)
我想要做的是設置一個錯誤,如果 esp32 尚未存儲 totalEnergy,則不允許用戶登錄用戶儀表板。
基本上為了去用戶儀表板,應用程序需要獲取 5 個孩子(用戶名、全名、電子郵件、密碼、總能量)。 如果尚未給出 totalEnergy,我想設置一個錯誤,例如“您的帳戶尚未准備好!請稍后再試”。
這是示例代碼。
public void loginUser(View view) {
//validate login info
if (!validateUsername() | !validatePassword()) {
return;
} else {
progressBar.setVisibility(View.VISIBLE);
isUser();
}
}
private void isUser() {
final String userEnteredUsername = username.getEditText().getText().toString().trim();
final String userEnteredPassword = password.getEditText().getText().toString().trim();
rootNode = FirebaseDatabase.getInstance();
reference = rootNode.getReference("USER INFO");
Query checkUser = reference.orderByChild("username").equalTo(userEnteredUsername);
checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
username.setError(null);
username.setErrorEnabled(false);
String passwordFromDB = snapshot.child(userEnteredUsername).child("password").getValue(String.class);
if (passwordFromDB.equals(userEnteredPassword)) {
username.setError(null);
username.setErrorEnabled(false);
String fullNameFromDB = snapshot.child(userEnteredUsername).child("fullName").getValue(String.class);
String usernameFromDB = snapshot.child(userEnteredUsername).child("username").getValue(String.class);
String emailFromDB = snapshot.child(userEnteredUsername).child("email").getValue(String.class);
Intent intent = new Intent(getApplicationContext(), UserDashboard.class);
Bundle extras = new Bundle();
int totalEnergyFromDB = snapshot.child(userEnteredUsername).child("totalEnergy").getValue(int.class);
intent.putExtra("fullName", fullNameFromDB);
intent.putExtra("username", usernameFromDB);
intent.putExtra("email", emailFromDB);
intent.putExtra("password", passwordFromDB);
extras.putString("totalEnergy", totalEnergyFromDB + "");
intent.putExtras(extras);
startActivity(intent);
} else {
progressBar.setVisibility(View.GONE);
password.setError("Wrong Password!");
password.requestFocus();
}
} else {
progressBar.setVisibility(View.GONE);
username.setError("No such user exist!");
username.requestFocus();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
progressBar.setVisibility(View.GONE);
Toast.makeText(Login.this, error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
我已經做了一個星期了,我無法弄清楚! :(請幫忙!!!謝謝!
你好HB。 這是錯誤:(在此處輸入圖像描述
你好HB。 應用錯誤 :(在此處輸入圖片說明
您可以檢查esp32
是否不是-1
,如果不是,則僅繼續,如下所示:
if (passwordFromDB.equals(userEnteredPassword)) {
username.setError(null);
username.setErrorEnabled(false);
String fullNameFromDB = snapshot.child(userEnteredUsername).child("fullName").getValue(String.class);
String usernameFromDB = snapshot.child(userEnteredUsername).child("username").getValue(String.class);
String emailFromDB = snapshot.child(userEnteredUsername).child("email").getValue(String.class);
int totalEnergyFromDB = -1;
try {
totalEnergyFromDB = snapshot.child(userEnteredUsername).child("totalEnergy").getValue(int.class);
} catch (Exception e){
e.printStackTrace();
}
if (totalEnergyFromDB != -1) {
Intent intent = new Intent(getApplicationContext(), UserDashboard.class);
Bundle extras = new Bundle();
intent.putExtra("fullName", fullNameFromDB);
intent.putExtra("username", usernameFromDB);
intent.putExtra("email", emailFromDB);
intent.putExtra("password", passwordFromDB);
extras.putString("totalEnergy", totalEnergyFromDB + "");
intent.putExtras(extras);
startActivity(intent);
} else {
Toast.makeText(Login.this, "Your account is not yet ready! Please try again later", Toast.LENGTH_SHORT).show();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.