我的应用程序有一个注册页面,其中只有那些输入正确密码的用户才能注册。此密码存储在名为" Councilpasscodes"的子项内的firebase数据库中。输入密码后,用户应按下提交按钮,在比较两个密码后,如果密码相同,则应允许用户注册。 这是用于比较编辑文本字符串和子值的代码:
mpasscode=FirebaseDatabase.getInstance().getReference().child("Councilpasscodes");
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String passcode1=editText.getText().toString().trim();
mpasscode.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String passc= (String) dataSnapshot.child("passcode").getValue();
if (passcode1.equals(passc)){
//do something
}else if(!passcode1.equals(passc)){
//do something
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
问题是在按下提交按钮后,它并没有真正检查两个字符串,即即使在输入正确的密码后,if (passcode1.equals(passc))
和if(!passcode1.equals(passc))
也没有被调用。我不确定代码有什么问题,因为我是应用程序开发的新手。感谢任何帮助。谢谢。
修改
我认为它根本没有执行addListenerForSingleValue
。我不确定为什么会这样。
答案 0 :(得分:0)
您是否尝试过使用.compareTo()方法? if(passcode1.compareTo(passc)== 0){}
答案 1 :(得分:0)
我认为firebase正在返回整数。您可以将报价设置为1234并再次尝试或比较为整数。
答案 2 :(得分:0)
如果您只使用数字,那么equalsIgnoreCase
会很好,或者如果您在counsilcode
中使用的字符类型没有限制,则.match
会很好
答案 3 :(得分:0)
好的伴侣。您的new[]
ValueEventListener
未被调用的原因是您无权编辑或读取您的数据库。发生这种情况是因为firebase实时数据库的默认安全设置在没有经过身份验证的用户的情况下不允许任何读取或写入。为了证明这一点,请观察Android Monitor中的onDataChange
日志。 (蓝色的。)一旦您点击提交,它将显示一个被捕获的异常,提及Firebase拒绝的权限。
从here了解Firebase安全性。
为了快速解决您可以做的事情,您可以允许读取或写入而无需任何形式的身份验证。为此,请编辑您的实时数据库warning
并添加此数据而不是在那里写的内容。
rules
我还要附上截图供参考。您将在firebase console中找到此屏幕。在控制台内部,单击您的项目,然后点击左侧{
"rules": {
".read": true,
".write": true
}
}
,如图所示。
这是一个安全失误,所以要从您的应用程序设置正确的身份验证,请按照下列步骤操作。 https://firebase.google.com/docs/auth/android/start/
另外,像这样添加toString()到Database
将其转换为String,因为它可能很长。
dataSnapshot.child("passcode").getValue()
另外,只是为了确定。如果您还没有,请添加此行
String passc = dataSnapshot.child("passcode").getValue().toString();
在你的上方
FirebaseApp.initializeApp(this);
希望它有所帮助!