Android 保存对象后立即在Firebase中获取保存的密钥

Android 保存对象后立即在Firebase中获取保存的密钥,android,firebase,firebase-realtime-database,firebase-storage,Android,Firebase,Firebase Realtime Database,Firebase Storage,我是Firebase的新手,我和Firebase一起走了这么远。例如保存对象和检索对象。我想知道如何保存对象的密钥。在hibernate中,它在保存对象时返回key。我想知道如何在Firebase中实现这一点。下面是我的代码,但到目前为止,我得到了nullpointerexception ref.child("Advertisements").push().setValue(mobileAdd); ref.addValueEventListener(new ValueEventListen

我是Firebase的新手,我和Firebase一起走了这么远。例如保存对象和检索对象。我想知道如何保存对象的密钥。在hibernate中,它在保存对象时返回key。我想知道如何在Firebase中实现这一点。下面是我的代码,但到目前为止,我得到了nullpointerexception

 ref.child("Advertisements").push().setValue(mobileAdd);

 ref.addValueEventListener(new ValueEventListener() {
 @Override
 public void onDataChange(DataSnapshot dataSnapshot) {


 StorageReference storageReference = mStorageReference.child("advertisement").child(dataSnapshot.getKey()).child(uri.getLastPathSegment());
 storageReference.putFile(uri);
 }

 @Override
 public void onCancelled(FirebaseError firebaseError) {

 }
 });

PS:我希望该键在Firebase的存储器中创建一个文件夹,以便我可以将这些图像保存到创建的文件夹中。

DatabaseReference.push()
是一个纯客户端操作,它返回对新位置的引用,从统计上保证该位置是唯一的。因此,您可以首先运行它并从中获取密钥,然后基于该密钥创建存储引用:

DatabaseReference newDatabaseRef = ref.child("Advertisements").push();
StorageReference newStorageRef = mStorageReference.child("advertisement").child(newRef.getKey()).child(uri.getLastPathSegment());
然后最后将该值设置到数据库并将该文件存储:

newDatabaseRef.setValue(mobileAdd);
newStorageRef.putFile(uri);

DatabaseReference.push()
是一种纯客户端操作,它返回对新位置的引用,从统计上保证该位置是唯一的。因此,您可以首先运行它并从中获取密钥,然后基于该密钥创建存储引用:

DatabaseReference newDatabaseRef = ref.child("Advertisements").push();
StorageReference newStorageRef = mStorageReference.child("advertisement").child(newRef.getKey()).child(uri.getLastPathSegment());
然后最后将该值设置到数据库并将该文件存储:

newDatabaseRef.setValue(mobileAdd);
newStorageRef.putFile(uri);