我正在尝试使用接口异步检查 Firebase 数据库中的条目,但我不确定如何以与密码和电子邮件相同的方式实现它。例子:if (TextUtils.isEmpty(password) || !isPasswordValid(password)) { mPasswordView.setError(getString(R.string.error_invalid_password)); focusView = mPasswordView; cancel = true; }private boolean isPasswordValid(String password) { // Add logic to check for a valid password (minimum 8 characters) String confirmPassword = mConfirmPasswordView.getText().toString(); return (confirmPassword.equals(password)) && (password.length() > 7) && (password != "12345678") && (password != "password"); }我正在尝试使用用户名创建一个类似的方法,用于检查 Firebase 中输入的用户名,然后在找到数据时返回 true。我创建了一个方法 (fetchUsername) 来在后台线程上检查 Firebase 中的名称,但无法弄清楚如何将结果正确传递回最终方法并返回一个布尔值。我相信我犯了一个愚蠢的语法错误,但我看不到。这是我所拥有的:private boolean isUsernameDuplicate(final String username) { boolean userIsOnFirebase ( boolean isOnFirebase){ ///<----line that won't take, wants semicolon after variable if (isOnFirebase) { return true; } else { return false; } } fetchUsername(username, new FirebaseSuccessListener() { @Override public void onDataFound(boolean isDataFetched) { if (isDataFetched) { userIsOnFirebase(true); } else { userIsOnFirebase(false); } } }); return userIsOnFirebase;}private void fetchUsername(final String username, final FirebaseSuccessListener dataFetched) { //checks database for username mReference = FirebaseDatabase.getInstance().getReference().child("users").child("username"); mReference.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { dataFetched.onDataFound(true); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } });}
1 回答

慕虎7371278
TA贡献1802条经验 获得超4个赞
这是一个解释。首先,field
变量是variable
在 内部创建的,class
并且可以被该 的所有成员访问class
。在variable
a 内部创建的另一侧method
只能由该方法的成员访问,而不能由class
.
Firebase 异步运行(读取和写入数据库)并实现自己的callbacks
,在 UI 线程上调用。例如,您可以实现的回调之一(取决于场景)是:onSuccessListener
、addOnFailureListener
、onCompleteListener
、onDataChange
。这callbacks
为您提供来自 Firebase(在本例中为数据库)的信息,要么写入成功,要么读取成功,并且您的数据已准备好在应用程序中使用或出现问题。在这些中,callbacks
您可以轻松更新您的 UI。
您现在正在做的是创建一个interface
将在触发时callbacks
触发的操作,这是一个不必要的步骤,因为您可以callback
直接在其中轻松更新 UI 。
您在要返回用户名的位置创建的方法也不会按预期工作。为什么?因为部分代码return fetchedusername
在从数据库返回结果之前执行。如您所知Fireabse
,异步运行,需要通过互联网获取数据,同时return fetchedusername
已经执行。这就是为什么你有callback
方法。
希望这可以清除一些事情。
添加回答
举报
0/150
提交
取消