我尝试了太多次但没有使用此代码。如何更新Firebase数据库中的结构中提到的特定字段
这是我的结构:
Blog
-LOkCTZQtuMIPT_c9ESK
desc: "wow"
id: "-LOkCTZQtuMIPT_c9ESK"
image:"firebase image"
title:"gh"
uid:"6757576gfgHh6"
所以我如何只能在id的帮助下更新desc,图像,标题这些特定字段
这是我的代码:
mCurrentUser = mAuth.getCurrentUser();
mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");
mDatabaseUser = FirebaseDatabase.getInstance().getReference().child("users").child(mCurrentUser.getUid());
private void startPosting() {
mProgress.setMessage("Posting...");
final String title_val = mPostTitle.getText().toString().trim();
final String desc_val = mNameFieldUpdate.getText().toString().trim();
if (!TextUtils.isEmpty(title_val) && !TextUtils.isEmpty(desc_val) && mImageUri != null) {
mProgress.show();
final StorageReference filepath = mStorage.child("Blog_Images").child(mImageUri.getLastPathSegment());
filepath.putFile(mImageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
@SuppressWarnings("VisibleForTests")
final Uri downloadUri = taskSnapshot.getDownloadUrl();
final String id = mDatabase.getKey();
mDatabaseUser.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mDatabase.child(id).child("title").setValue(title_val);
mDatabase.child(id).child("desc").setValue(desc_val);
mDatabase.child(id).child("image").setValue(downloadUri.toString());
mProgress.dismiss();
Intent mainIntent = new Intent(Update_Post.this, Main2Activity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(mainIntent);
finish();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
您在基础博客数据库引用(/ Blog)上使用了getKey()。您需要使用push()在该引用中创建一个新节点,然后在新创建的子节点上创建getKey()。
final String id = mDatabase.push().getKey();
做这个:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Blog");
ref.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
for(DataSnapshot data: dataSnapshot.getChildren()){
String uid=data.child("uid").getValue().toString();
if(uid.equals((mCurrentUser.getUid()){
String keyid=data.getKey();
ref.child(keyid).child("title").setValue(newtitle);
ref.child(keyid).child("image").setValue(newurl);
ref.child(keyid).child("desc").setValue(newdesc);
}
}
}
在child("Blog")
有听众的位置,然后在其内部迭代并获得keyid
的密钥。然后更新值简单指向正确的位置并更新每个值。