代码之家  ›  专栏  ›  技术社区  ›  Rohit Kumar

从Firebase实时数据库中获取和比较密钥和值

  •  0
  • Rohit Kumar  · 技术社区  · 6 年前

    我正在尝试制作一个应用程序,用户可以在其中存储他的数据。我使用了用户共享首选项来保存用户登录详细信息,但出于安全目的,我做了一个活动(验证密码活动),要求用户密码允许访问数据。现在我可以保存、获取和删除数据。但是在我的Verify Passcode活动中,我只想获取存储密码的特定键和值。我不想在验证密码活动中获取完整的数据。

    下面是我用来将密码保存到数据库的代码:-

    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数据库的截图:-

    Database Screenshot

    下面是验证密码活动屏幕截图:-

    Verify Passcode Activity Screenshot

    请查看数据库截图并验证密码活动截图。

    议程:

    1. 活动中的textView中的getText()。

    2. 从firebase实时数据库获取值(仅适用于当前用户)阿披实88666kumar在我们的情况下)。

    3. 比较1和2是否相同。(如果相同,则重定向到MainActivity,否则显示错误。)

    请告诉我我做错了什么。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Rohit Kumar    6 年前

    感谢大家的帮助:)你的回答对我不起作用,但在你的回答和我的知识的帮助下,我自己解决了我的问题。 这是符合我要求的代码。这段代码正是我想要的。

    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) {
    
                            }
                        });
    
        2
  •  0
  •   Frank van Puffelen    6 年前

    假设 pass 是一个类似于 1234 ,这行:

    dbreference.child(uniqueID).orderByChild("passcode").equalTo(pass).addListenerForSingleValueEvent(...
    

    应该是:

    FirebaseDatabase.getInstance().getReference("passcodes").orderByValue().equalTo(pass).addListenerForSingleValueEvent(...
    

    这边是 DataSnapshot 将包含的所有子节点 passcodes 有价值的 1234年 ,即。 "abhishek88666kumar" 在JSON示例中。

    也一定要研究 documentation on sorting and filtering data .

        3
  •  0
  •   chetan mahajan    6 年前

    这是比较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());
                    }
                });
    
            }
        });
    

    两者都在起作用。 希望对你有帮助。 谢谢您。