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

时间:2016-05-27 12:18:53

标签: java android firebase firebase-realtime-database fire-sharp

好吧,我是Firebase的新手,我希望在将新数据推送到数据库时拥有自己的密钥。

问题:

FireBase.push().setValue(mapped_values);

这给出了如下结构:

 database output

如何在那里创建自己的自定义密钥? 如用户名或其他东西。

11 个答案:

答案 0 :(得分:116)

致电push()会为您生成一个密钥。

如果您使用child(),则可以自行确定键/路径。

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

即使root包含许多子项,也可以使用 setValue()创建自定义键 例如,如果'用户'是根,您希望添加电子邮件用户作为关键,这将是这样的

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

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

希望这有帮助。

答案 3 :(得分:0)

如果您使用FirebaseUI

private static final CollectionReference usersCollection = FirebaseFirestore.getInstance().collection("users");

User user = new User("MyUsername", "MyPictureUrl");
String userKey = "1234567sdfsf8";

usersCollection.document(userKey).set(user); //MAGIC LINE

答案 4 :(得分:0)

只是为了分享知识。

如果您使用的是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

答案 5 :(得分:0)

简单快速

 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);

答案 6 :(得分:0)

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

DatabaseReference myRef = FirebaseDatabase.getInstance().getReference(); String mText = // get data from editText or set your own custom data

现在是否插入这样的数据:

myRef.child("abc").child("cba").setValue(mText);

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

现在,将子级“ cba”的值更改为无法解决的随机或动态值。例如:

Random rand = new Random(); // Obtain a number between [0 - 49]. int n = rand.nextInt(50); myRef.child("abc").child(String.valueOf(n)).setValue(mText);

在这种情况下,它将添加一个新值而不是进行更新。因为此时间参考在这里不固定。它是动态的。 push()方法完全相同。它会生成随机密钥以维护唯一引用。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

假设您的数据库外观

 "BookShelf" : {
    "book1" : {
      "bookName" : "book1_push"
       ...
     }

您的代码是(不要使用push(),push()生成随机密钥)

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
Book data = new Book();
mDatabase.child("BookShelf").child("book1").setValue(data);
    
     

答案 9 :(得分:0)

如果您使用 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);

The sample entry in your database would look like this

答案 10 :(得分:-2)

作为对最佳答案的更新,Firebase API has been changedIgnore不再起作用。现在,您必须改为使用CustomerDto函数:

ListDataDto