さて、私はFirebaseを初めて使用するので、新しいデータをデータベースにプッシュするときに独自のキーを持ちたいと思っています。
問題:
FireBase.Push().setValue(mapped_values);
これにより、次のような構造が得られます。
そこで独自のカスタムキーを作成するにはどうすればよいですか?ユーザー名など。
Push()
を呼び出すと、キーが生成されます。
代わりにchild()
を使用する場合、キー/パスを自分で決定できます。
ref.child("Victor").setValue("setting custom key when pushing new data to firebase database");
String key="1234567sdfsf8";
//custom object
User user=new User();
DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("Users").child(key).setValue(user);
ルートに多くの子が含まれている場合でもsetValue()を使用してカスタムキーを作成できます。たとえば、 'Users'がルートで、メールとしてユーザーをキーとして追加する場合は次のようになります。
firebase.child("firebase url").child("Users").child("user_1 email").setValue(...)
firebase.child("firebase url").child("Users").child("user_2 email").setValue(...)
等
お役に立てれば。
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
POSTリクエストではIDが生成されますが、PATCHでは、PUTリクエストで提供されるキーが示されます。
データベース参照の子が固定文字列の場合、新しい値は追加されません。前の値が更新されるだけです。例えば :
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()メソッドはまったく同じことを行います。ランダムなキーを生成して一意の参照を維持します。
知識を共有するためだけに。
ファイアシャープを使用している場合は、次のようにカスタムキーを作成できます
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);