Java 将新数据推送到firebase数据库时设置自定义键

Java 将新数据推送到firebase数据库时设置自定义键,java,android,firebase,firebase-realtime-database,fire-sharp,Java,Android,Firebase,Firebase Realtime Database,Fire Sharp,嗯,我是Firebase的新手,我想在将新数据推送到数据库时拥有自己的密钥 问题: FireBase.push().setValue(mapped_values); 其结构如下所示: 如何在那里创建自己的自定义密钥? 例如用户名之类。调用push()将为您生成一个密钥 如果改为使用child(),您可以自己确定它们的键/路径 ref.child("Victor").setValue("setting custom key when pushing new data to firebase d

嗯,我是Firebase的新手,我想在将新数据推送到数据库时拥有自己的密钥

问题:

FireBase.push().setValue(mapped_values);
其结构如下所示:

如何在那里创建自己的自定义密钥? 例如用户名之类。

调用
push()
将为您生成一个密钥

如果改为使用
child()
,您可以自己确定它们的键/路径

ref.child("Victor").setValue("setting custom key when pushing new data to firebase database");

即使根目录包含多个子目录,也可以使用setValue()创建自定义键 例如,如果“Users”是根用户,并且您希望添加以电子邮件作为密钥的用户,则如下所示

firebase.child("firebase url").child("Users").child("user_1 email").setValue(...)

firebase.child("firebase url").child("Users").child("user_2 email").setValue(...)

希望这对您有所帮助。

如果您正在使用:

        String key="1234567sdfsf8";
        //custom object
        User user=new User();
        DatabaseReference mDatabase;
        mDatabase = FirebaseDatabase.getInstance().getReference();
        mDatabase.child("Users").child(key).setValue(user);

只是为了分享知识

如果使用的是fire sharp,则可以按如下方式创建自定义关键点

            IFirebaseConfig config = new FirebaseConfig
            {
                AuthSecret = "SecretKey",
                BasePath = "https://abc.firebaseio.com/",
                Host = "abc.firebaseio.com/"
            };
            IFirebaseClient client = new FirebaseClient(config);

            var obj = new Users
            {
                FirstName = "test",
                MiddleName = "user",
                LastName = "xyz"

            };

            SetResponse response = client.SetAsync("Profile", "YourID");//you can use Set() as well
            response = client.SetAsync("Profile/YourID", obj);//you can use Set() as well
简捷

 Map<String,Object> taskMap = new HashMap<>();
       taskMap.put("Name", name.getText().toString());
       taskMap.put("km", km.getText().toString());
      // taskMap.put("age", "45");
       taskMap.put("Day", day.getText().toString());
       mDatabaseReference.push().setValue(taskMap);
Map taskMap=newhashmap();
taskMap.put(“Name”,Name.getText().toString());
taskMap.put(“km”,km.getText().toString());
//taskMap.put(“年龄”、“45”);
taskMap.put(“Day”,Day.getText().toString());
mDatabaseReference.push().setValue(taskMap);

作为顶部答案的更新,和
setValue()
不再起作用。现在必须使用
set()
函数:

ref.child("Victor").set("setting custom key when pushing new data to firebase database");

若数据库引用子项是固定字符串,则不会添加新值。只是它会更新以前的值。例如:

DatabaseReference myRef=FirebaseDatabase.getInstance().getReference();
String mText=//从editText获取数据或设置自己的自定义数据

现在,如果我插入如下数据:

myRef.child(“abc”).child(“cba”).setValue(多行文字)

每次我插入数据时,它都会更新我以前的数据。它不会添加新数据。因为我的引用在这里是固定的(
myRef.child(“abc”).child(“cba”)
//这个总是固定的)

现在将子“cba”的值更改为随机或动态值,该值不会固定。例如:

Random rand=new Random();
//获取一个介于[0-49]之间的数字。
int n=兰特·耐克斯汀(50);
myRef.child(“abc”).child(String.valueOf(n)).setValue(mText)


在这种情况下,它将添加一个新值,而不是更新。因为这里的时间参考不是固定的。它是动态的。push()方法也做同样的事情。它生成随机密钥以保持唯一引用。

在POST请求中,它将生成ID,但在PATCH、PUT请求中,它将提到您将提供的密钥。

假设您的数据库看起来像

 "BookShelf" : {
    "book1" : {
      "bookName" : "book1_push"
       ...
     }
您的代码(不要使用push(),push()生成一个随机键)


如果您使用Node.js写入firebase实时数据库,则有一个函数:

function registerVibinScores( reference, childId, dataToWrite){

    var ref = db.ref(reference); //vibinScores
    usersRef = ref.child(childId);
    usersRef.set(
        dataToWrite
    );

}

//Example to invoke it:
var vibinEntry = {
    "viberId": "425904090208534528",
    "person": {
        "name": "kukur",
        "score": 0,
        "id": "425904090208534528"
    },
    "vibinScore": 0,
    "timeOfEntry": "2021-04-19T16:59:23.077Z"
}

registerVibinScores('vibinScores/allEntries', 112, vibinEntry);

他没有将其标记为答案,因为它没有回答他的问题,因为Firebase会自动生成一个带有随机键的子项,无论您将其推入或设置到数据库中的是什么。@FrenchyNYC如果您使用
.child('customkey')…
以及如何使用构造函数中的angularfire2?@特洛伊木马设置:构造函数,则不会(私有数据库:AngularFireDatabase)您可以这样做:this.db.database.ref().child('somechild').set('somevalue')。在2020年,应该使用
set()
而不是
setValue()
如果密钥不存在,它会抛出一个错误,因为没有定义setValue
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
Book data = new Book();
mDatabase.child("BookShelf").child("book1").setValue(data);
    
     
function registerVibinScores( reference, childId, dataToWrite){

    var ref = db.ref(reference); //vibinScores
    usersRef = ref.child(childId);
    usersRef.set(
        dataToWrite
    );

}

//Example to invoke it:
var vibinEntry = {
    "viberId": "425904090208534528",
    "person": {
        "name": "kukur",
        "score": 0,
        "id": "425904090208534528"
    },
    "vibinScore": 0,
    "timeOfEntry": "2021-04-19T16:59:23.077Z"
}

registerVibinScores('vibinScores/allEntries', 112, vibinEntry);