Firebase - 数据库不一致数据存储在Android中的数据库中

时间:2016-07-28 18:27:33

标签: android firebase firebase-realtime-database

我是firebase的新手。我试图以给定的格式在Firebase数据库中存储一些数据:

approot{
uid{
name:"name"
add:"add"
phn:"phn"
}
uid2{
name:"name"
add:"add"
phn:"phn"
}
.......

等等。 为此我写了以下代码:

String phn = inputPhn.getText().toString().trim();
        String add = inputAdd.getText().toString().trim();
        String name = inputName.getText().toString().trim();

        if (TextUtils.isEmpty(name)) {
            Toast.makeText(getApplicationContext(), "Enter name!", Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(phn)||phn.length()!=10) {
            Toast.makeText(getApplicationContext(), "Enter phone no.!", Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(add)) {
            Toast.makeText(getApplicationContext(), "Enter address!", Toast.LENGTH_SHORT).show();
            return;
        }
        //String info="Name:"+name+"\n"+"PhoneNo:"+phn+"\n"+"Adress:"+add+"\n";
        String uId=auth.getCurrentUser().getUid();
        myref.child(uId).child("name").setValue(name);
        myref.child(uId).child("add").setValue(add);
        myref.child(uId).child("phone").setValue(phn);
        myref.child(uId).child("end").setValue("end");
        auth.signOut();

我的问题是我在firebase数据库中获得了一致的数据存储。存储在数据库中的数据是:

{
  "User" : {
    "ANj8GLEJS9alW11QYQyF8Rykwyn2" : {
      "add" : "hzjs",
      "name" : "hxjx"
    },
    "b0ZBftQ5UOOtTtzkeZHcC0558MC3" : {
      "add" : "gw",
      "name" : "hs"
    },
    "eH6rCXzvEncTe163N7KaJ7XEZp52" : {
      "name" : "dudj"
    },
    "gEqc92Z0mvcfIWvhZu7QOhRcnNQ2" : {
      "add" : "bsus",
      "name" : "jziz",
      "phone" : "1234567890"
    },
    "kGF2PalHrpeFus6682z55p47YBg2" : {
      "add" : "hdud",
      "name" : "jdhd"
    },
    "nHRt5n5roGfU3QogVUM09HDBrIw2" : {
      "add" : "qwerty",
      "end" : "end",
      "name" : "q",
      "phone" : "1234567860"
    },
    "pRRzexjQN1eynoCQcoClNl2TcHk2" : {
      "add" : "dvjh",
      "name" : "rhid"
    },
    "vaek3Z4eEVTWmc722T92tfgBwaE3" : {
      "add" : "dhudvj",
      "name" : "gsbud"
    },
    "xsH5JoTXftaxicUmvntt0N5hcNJ3" : {
      "add" : "zhs",
      "name" : "q"
    }
  }
}

请帮帮我。
修改
我正在使用firebase 9.2.1。 并且定义的规则是: -

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

1 个答案:

答案 0 :(得分:2)

在您注销用户之前,您应该等待setValue完成,因为在signOut成功调用后,auth将为null。如果setValue尚未完成,则会违反您的规则,因为auth已为空。

您可以使用CompletionListener确保setValue已完成,然后您可以安全地退出该用户。喜欢这个

Map<String, String> values = new HashMap<>();
values.put("name", name);
values.put("add", add);
values.put("phone", phn);
values.put("end", end);

DatabaseReference.CompletionListener completionListener = new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
        auth.signOut();
    }
};
myref.child(uid).setValue(values, completionListener);