我正在尝试制作一个用于用户存储其数据的应用程序。我使用了用户共享首选项来保存用户登录详细信息,但出于安全目的,我进行了一项活动(验证密码活动),要求用户密码允许访问数据。现在,我可以保存,获取和删除数据。但是在我的验证密码活动中,我只想获取存储密码的特定键和值。我不想在“验证密码活动”中获取完整的数据。
下面是我用来将密码保存到数据库的代码:-
databaseReference.child(uniqueID).setValue(passcode);
以下是我尝试仅获取密码的代码:-
dbreference.child(uniqueID).orderByChild("passcode").equalTo(pass).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
Toast.makeText(getApplicationContext(), "Data exist", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(), "Data doesn't exist", Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
这里uniqueID
是"abhishek88666kumar"
,而pass
是用于getText()
的变量。
这是我的Firebase数据库的屏幕截图:-
这是验证密码活动屏幕截图:-
请查看数据库截图并验证密码活动截图。
议程:
getText()来自活动内部的textView。
getValue(仅适用于当前用户。在我们的情况下为'abhishek88666kumar')。
比较1和2是否相同。 (如果相同,则重定向到MainActivity,否则显示错误。)
请告诉我我做错了。
答案 0 :(得分:0)
假设pass
是类似于1234
的值,则此行:
dbreference.child(uniqueID).orderByChild("passcode").equalTo(pass).addListenerForSingleValueEvent(...
应该是:
FirebaseDatabase.getInstance().getReference("passcodes").orderByValue().equalTo(pass).addListenerForSingleValueEvent(...
这样,DataSnapshot
将包含passcodes
的所有子节点,它们的值均为1234
,即JSON示例中的"abhishek88666kumar"
。
答案 1 :(得分:0)
这是比较Firebase数据的第一种方法。
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
passcode = editText.getText().toString();
Toast.makeText(getApplicationContext(), "Data :"+passcode, Toast.LENGTH_LONG).show();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("passcode");
Query applesQuery = ref.orderByValue().equalTo(passcode);
applesQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
Toast.makeText(getApplicationContext(), "Data exist", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(), "Data doesn't exist"+passcode, Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Log.e(TAG, "onCancelled", databaseError.toException());
}
});
}
});
这是比较Firebase数据的第二种方法。
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
check = editText.getText().toString();
Toast.makeText(getApplicationContext(), "Data :"+check, Toast.LENGTH_LONG).show();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("passcode");
// Query applesQuery = ref.child("Customers").orderByChild("abhishek88666kumar").equalTo(passcode);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
if(map.get("abhishek88666kumar")!=null){
passcode = map.get("abhishek88666kumar").toString();
if (passcode.equals(check))
{
Toast.makeText(getApplicationContext(), "Data exist", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(getApplicationContext(), "Data doesn't exist"+check, Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Log.e(TAG, "onCancelled", databaseError.toException());
}
});
}
});
两个都在工作。 希望对您有帮助。 谢谢。
答案 2 :(得分:0)
感谢大家的帮助:)您的答案对我没有用,但是借助您的答案和我的一些知识,我自己为问题解决了。 这是符合我要求的代码。这段代码正好按照我想要的方式工作。
dbreference = FirebaseDatabase.getInstance().getReference("passcodes");
Query query = dbreference.orderByKey().equalTo(currentUser); //current user is "abhishek88666kumar" in this case.
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
String passcode = txtPasscode.getText().toString;//Passcode is 1234 in this case.
String fetchedValue = "";
for (DataSnapshot snap : dataSnapshot.getChildren()){
fetchedValue = (String) snap.getValue();
}
if (!passcode.equals(fetchedValue)){
Toast.makeText(getApplicationContext(), "Passcode doesn't match.", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(), "Passcode matched.", Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(getApplicationContext(), "No passcode found for this user", Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});