android firebase无法添加第二个孩子

时间:2017-01-25 03:41:01

标签: android firebase-realtime-database

我的代码:

btnSubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            NewQuestionData nqd = new NewQuestionData(question.getText().toString(),keywords.getText().toString(),description.getText().toString());
            databaseReference.child(firebaseUser.getUid()).child("question"+Math.random()).setValue(nqd);
        }
    });

每次我将值插入数据库时​​,都会失败。

问题出在这里:

child("question"+Math.random())

我想在每个问题上添加唯一ID。

以下工作正常:

child("question")

请分享您的宝贵建议,如何为插入Firebase数据库的每个新问题插入唯一的子代。

3 个答案:

答案 0 :(得分:1)

试试这个。

String key = databaseReference.child(firebaseUser.getUid()).child("question").push().getKey();
databaseReference.child(firebaseUser.getUid()).child("question").child(key).setValue(nqd);

// key is unique every time you add your new question.

有关详细信息,请访问https://firebase.google.com/docs/database/android/read-and-write

OR

你可以使用System.currentTimeMillis() 它会给出时间戳长而且永远是唯一的。

databaseReference.child(firebaseUser.getUid()).child("question"+System.currentTimeMillis()).setValue(nqd);

答案 1 :(得分:0)

问题是随机生成器函数Math.random()生成0到1之间的值,这些值将具有小数点 - . 现在,添加到字符串中的这个小数看起来像question0.0001

如果您查看Firebase文档,则会看到.是密钥中的禁用字符。所以这将是你的问题。如果您想要生成随机值,请使用会生成从0到INTEGER_MAX的随机值的内容。

答案 2 :(得分:0)

要插入具有唯一键的子项而不必担心,请调用Firebase的const EnRedirect = ({ match }) => { const parts = match.url.split('/') parts.splice(1,1) const to = parts.join('/') return <Redirect to={to} /> } 方法。请参阅Firebase documentation on appending data

您的代码可能是:

push()

这将生成此博客帖子中指定格式的唯一键:The 2^120 Ways to Ensure Unique Identifiers

如果您仍想使用databaseReference .child(firebaseUser.getUid()) .push() .setValue(nqd); 前缀,可以将question用作单独的呼叫(它是不连接到数据库的客户端呼叫):

push()