我的代码:
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数据库的每个新问题插入唯一的子代。
答案 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()