如何更新firebase数据库值

时间:2017-12-19 20:42:58

标签: java android firebase firebase-realtime-database

我尝试了太多次但没有使用此代码。如何更新结构中提到的F​​irebase数据库中的特定字段

这是我的结构:

Blog
-LOkCTZQtuMIPT_c9ESK
  desc: "wow"
  id: "-LOkCTZQtuMIPT_c9ESK"
  image:"firebase image"
  title:"gh"
  uid:"6757576gfgHh6"

所以我如何只能在id

的帮助下更新desc,image,title这些特定字段

这是我的代码:

 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) {

                    }
                });

2 个答案:

答案 0 :(得分:0)

您在基础博客数据库引用(/ Blog)上使用了getKey()。您需要使用push()在该引用中创建一个新节点,然后在新创建的子节点上创建getKey()。

final String id = mDatabase.push().getKey();

答案 1 :(得分:0)

这样做:

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的密钥。然后更新值简单指向正确的位置并更新每个值。

相关问题