Android 添加数据dosen';不会在Firebase实时中显示
实际上,我正在尝试将图像上载到Firestorage,然后将URL添加到Firebase数据库。 我的代码运行正常,并在特定用户ID下成功地将所选图像上载到存储器我的问题是在向数据库添加数据时,它已成功执行,如logcat所示,但当我签入数据库时,添加的数据未出现,我检查了Firebase的权限以及安全角色设置正确,但仍然未向节点添加数据我的代码中有错误吗Android 添加数据dosen';不会在Firebase实时中显示,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,实际上,我正在尝试将图像上载到Firestorage,然后将URL添加到Firebase数据库。 我的代码运行正常,并在特定用户ID下成功地将所选图像上载到存储器我的问题是在向数据库添加数据时,它已成功执行,如logcat所示,但当我签入数据库时,添加的数据未出现,我检查了Firebase的权限以及安全角色设置正确,但仍然未向节点添加数据我的代码中有错误吗 private void UpoloadImageTofirebaseStorage() { user_id = mAuth.get
private void UpoloadImageTofirebaseStorage() {
user_id = mAuth.getCurrentUser().getUid();
mStorageRef = FirebaseStorage.getInstance().getReference("users").child(user_id);
if (imagePath != null) {
// final StorageReference imageRef = mStorageRef.child("users").child(user_id);
UploadTask uploadTask = mStorageRef.putFile(imagePath);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i(TAG, "Store image in storage:failure", e);
}
});
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Task<Uri> downloadUrl = mStorageRef.getDownloadUrl();
Log.i(TAG,"Image Added "+ downloadUrl);
downloadUrl.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
profileImageURL = uri.toString();
Log.i(TAG,"File Location"+ profileImageURL);
SaveUserToFirebaseDatabase( profileImageURL);
}
});
}
});
}
}
// add user info to datadase
private void SaveUserToFirebaseDatabase(String profileImageURL)
{
user_id = mAuth.getCurrentUser().getUid();
CreationDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date());
MyUsers user = new MyUsers(FullName,Password,EmailAddress,Gender, profileImageURL,CreationDate);
//add user to profile & all
DatabaseReference mDatabase= FirebaseDatabase.getInstance().getReference("users/profile").child(user_id);
mDatabase.setValue(user).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i(TAG," mDatabase unable to add data"+ e);
}
});
Toast.makeText( UserSignup.this, "your information Added Successfully ", Toast.LENGTH_LONG).show();
}
private void UpoloadImageTofirebaseStorage(){
user_id=mAuth.getCurrentUser().getUid();
mStorageRef=FirebaseStorage.getInstance().getReference(“用户”).child(用户id);
if(imagePath!=null){
//最终StorageReference imageRef=mStorageRef.child(“用户”).child(用户id);
UploadTask UploadTask=mStorageRef.putFile(imagePath);
uploadTask.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.i(标签“存储器中的存储器映像:失败”,e);
}
});
uploadTask.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
Task downloadUrl=mStorageRef.getDownloadUrl();
Log.i(标签,“添加图像”+下载URL);
downloadUrl.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共无效(Uri){
profileImageURL=uri.toString();
Log.i(标记“文件位置”+profileImageURL);
SaveUserToFirebaseDatabase(profileImageURL);
}
});
}
});
}
}
//将用户信息添加到数据库
私有void SaveUserToFirebaseDatabase(字符串配置文件ImageURL)
{
user_id=mAuth.getCurrentUser().getUid();
CreationDate=newSimpleDateFormat(“yyyy-MM-dd HH:MM:ss”,Locale.getDefault()).format(new-Date());
MyUsers user=新的MyUsers(全名、密码、电子邮件地址、性别、profileImageURL、CreationDate);
//将用户添加到配置文件(&all)
DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference(“用户/配置文件”).child(用户id);
mDatabase.setValue(用户).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.i(标记“mDatabase无法添加数据”+e);
}
});
Toast.makeText(UserSignup.this,“您的信息添加成功”,Toast.LENGTH_LONG.show();
}
所有添加的数据都显示在logcat中,但仍然没有显示为firebase中的节点您可能缺少以下
push()
方法。试试这个:
mDatabase.push().setValue(user)
--这就是我得到答案的地方。实际上,op已经在创建一个指向特定于用户的节点的路径,该节点具有
getReference(“users/profile”).child(user\u id)
。虽然push()
是生成唯一ID的好方法,但在这里,使用UID识别用户配置文件是更好的方法。:)啊,我明白了,谢谢你!我记得当我在Firebase上工作时,你帮了我很多忙。如果你在mDatabase.setValue(user)
调用中添加addOnSuccessListener
,是否也会调用它?是的,它被称为@FrankvanPuffelenThanks以供确认。我不确定我是否理解在这种情况下会出现什么问题,因为数据库写入的onSuccess
处理程序只有在数据提交到服务器上之后才被调用。你确定你找对地方了吗?另外:你能编辑你的问题来显示更新的代码和它的输出吗?谢谢@FrankvanPuffelen我用我在Logcathanks中得到的更新了我的问题。您还可以更新代码以显示您的onSuccess
处理程序吗?