Android 从firebase中删除数据,而不是更新用户的数据
我使用Firebase创建了一个登录注册系统,在配置文件页面中,我从Firebase检索了用户的数据。接下来,我为我的用户创建了一个编辑配置文件页面,用户可以编辑信息和配置文件图片,但这是我的问题 当用户单击保存按钮时,该特定用户的整个节点将从firebase中删除 编辑profile.javaAndroid 从firebase中删除数据,而不是更新用户的数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我使用Firebase创建了一个登录注册系统,在配置文件页面中,我从Firebase检索了用户的数据。接下来,我为我的用户创建了一个编辑配置文件页面,用户可以编辑信息和配置文件图片,但这是我的问题 当用户单击保存按钮时,该特定用户的整个节点将从firebase中删除 编辑profile.java public class ProfileEditInfo extends AppCompatActivity { private EditText newUserName, newUserEmail,
public class ProfileEditInfo extends AppCompatActivity {
private EditText newUserName, newUserEmail, newUserPhone;
private Button save;
private DatabaseReference databaseReference;
private FirebaseAuth firebaseAuth;
private FirebaseDatabase firebaseDatabase;
private ImageView updateProfilePic;
private static int PICK_IMAGE = 123;
Uri imagePath;
private StorageReference storageReference;
private FirebaseStorage firebaseStorage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile_edit_info);
updateProfilePic = findViewById(R.id.ivProfileUpdate);
newUserName = findViewById(R.id.etNameUpdate);
newUserEmail = findViewById(R.id.etEmailUpdate);
newUserPhone = findViewById(R.id.etPhoneUpdate);
save = findViewById(R.id.btnSave);
databaseReference= FirebaseDatabase.getInstance().getReference("users");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
firebaseAuth = FirebaseAuth.getInstance();
firebaseDatabase = FirebaseDatabase.getInstance();
String userID = firebaseAuth.getUid();
firebaseStorage = FirebaseStorage.getInstance();
storageReference = FirebaseStorage.getInstance().getReference();
final StorageReference storageReference = firebaseStorage.getReference();
storageReference.child("images").child(firebaseAuth.getUid() + "." + "jpg").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Picasso.get().load(uri).fit().centerCrop().into(updateProfilePic);
}
});
// final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("users").child(userID);
databaseReference.child(userID).addListenerForSingleValueEvent(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Users userProfile = dataSnapshot.getValue(Users.class);
newUserName.setText(userProfile.getName());
newUserPhone.setText(userProfile.getPhone());
newUserEmail.setText(userProfile.getEmail());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(ProfileEditInfo.this, databaseError.getCode(), Toast.LENGTH_SHORT).show();
}
});
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = newUserName.getText().toString();
String phone = newUserPhone.getText().toString();
String email = newUserEmail.getText().toString();
// Users userProfile = new Users(name, phone, email);
// databaseReference.setValue(userProfile);
String id = firebaseAuth.getCurrentUser().getUid();
Users user = new Users(id,name, email, phone);
databaseReference.child(id).setValue(user);
StorageReference imageReference = storageReference.child("images").child(firebaseAuth.getUid() + "." + "jpg"); //User id/Images/Profile Pic.jpg
UploadTask uploadTask = imageReference.putFile(imagePath);
uploadTask.addOnFailureListener(new OnFailureListener() {
public void onFailure(@NonNull Exception e) {
Toast.makeText(ProfileEditInfo.this, "Upload failed!", Toast.LENGTH_SHORT).show();
startActivity(new Intent(ProfileEditInfo.this, DisplayProfile.class));
finish();
}
}).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
Toast.makeText(ProfileEditInfo.this, "Upload successful!", Toast.LENGTH_SHORT).show();
startActivity(new Intent(ProfileEditInfo.this, DisplayProfile.class));
finish();
}
});
finish();
}
});
updateProfilePic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Image"), PICK_IMAGE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && data.getData() != null) {
imagePath = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imagePath);
updateProfilePic.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
package com.example.deepak.myapplication;
public class Users {
public String imageUrl;
public String imageName;
public String uid;
public String name;
public String email;
public String password;
public String phone;
public Users(){}
public Users(String id, String name, String phone, String email){}
public Users(String uid, String name, String email, String password, String phone) {
this.uid = uid;
this.name = name;
this.email = email;
this.password = password;
this.phone = phone;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
数据库结构在这里
数据库结构
当我点击编辑信息时,我能够检索编辑文本框中的所有数据,但一旦我编辑数据并点击保存按钮,我创建用户的整个用户id节点就会被删除,然后我会得到空指针异常
所以,请帮助e,让我知道我错在哪里
谢谢。Firebase要求每个节点至少有一个子节点,同时具有键和值两者都有。只有一个没有值的键作为子节点或根本没有子节点将导致删除整个节点。我建议您确保在将用户对象保存到Firebase之前设置了值 您确定Firebase数据库中的数据已被删除,因为我从代码中看到,当您单击
imageView
时,您只需打开新活动并设置新图像。可能是我不太理解你们的问题是我在笔记本电脑屏幕上打开了firebase实时数据库,然后我从手机上单击了save buton,它在下一秒被删除了它只是被删除了还是发生了其他事情?什么时候应该更新您的数据?我不知道发生了什么,我所能看到的只是我的节点从realtie Database中被删除,当我单击save按钮时,t应该被更新,当我单击save按钮时,所有节点都被删除了,或者只有它下面的几个属性?请回复@AlexMamo