更新和删除Firebase中的数据

时间:2017-01-26 08:42:34

标签: android firebase firebase-realtime-database

这是我的数据库:

{
  "UID1" : {
    "KEY" : {
      "Name" : "name1",
      "Email" : "something1@something.com",
      "userid" : "UID1"
    }
  },
  "UID2" : {
    "KEY2" : {
      "Name" : "name1",
      "Email" : "something1@something.com",
      "userid" : "UID2"
    },
    "KEY3" : {
      "Name" : "name2",
      "Email" : "something2@something.com",
      "userid" : "UID2"
    },
    "KEY4" : {
      "Name" : "name3",
      "Email" : "something3@something.com",
      "userid" : "UID2"
  }
}

我想更新和删除数据,例如位于“KEY2”的位置。

我怎样才能做到这一点?我还没有在Android中尝试过任何代码。

2 个答案:

答案 0 :(得分:14)

要编写单个数据,您可以使用setValue()上的DatabaseReference方法与您的孩子ID:

private void writeNewData(String userId, String name, String email) {
    User user = new User(name, email);    
    mDatabase.child("users").child(userId).setValue(user);
}

在您的情况下,您可以执行以下操作: mDatabase.child("UID2").child("KEY2").setValue(yourNewValueOrObject);

如果您想更新特定值,您应该更简洁: mDatabase.child("UID2").child("KEY2").child("email").setValue(newEmail);

无论如何,我建议您使用自定义类作为POJO(Plain Old Java Object),并使用数据库中每个项目的值。例如:

public class User {

    public String username;
    public String email;

    public User() {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }

}

最后要删除数据,您应该以相同的方式使用removeValue()方法。

  private void deleteUserData(String userId) {           
        mDatabase.child("users").child(userId).removeValue();
    }

此方法将从数据库中删除整个引用,因此请小心使用它。如果您要删除特定字段,则应该向树添加另一个.child()调用。例如,假设我们要从“KEY2”节点中删除电子邮件值: mDatabase.child("users").child(userId).child("email").removeValue();

最后,我们可能希望更新不同数据库节点中的多个字段。在这种情况下,我们应该使用updateChildren()方法和引用和值的映射。

private void writeNewPost(String userId, String username, String title, String body) {
   // Create new post at /user-posts/$userid/$postid and at
   // /posts/$postid simultaneously
   String key = mDatabase.child("posts").push().getKey();
   Post post = new Post(userId, username, title, body);
   Map<String, Object> postValues = post.toMap();

   Map<String, Object> childUpdates = new HashMap<>();
   childUpdates.put("/posts/" + key, postValues);
   childUpdates.put("/user-posts/" + userId + "/" + key, postValues);

   mDatabase.updateChildren(childUpdates);
}

updateChildren方法的作用。对给定setValue ()中每一行的Map<String, Object>调用是关键,是节点的完整引用,而对象是值。

您可以在官方Firebase documentation

中阅读更多更新和删除数据

答案 1 :(得分:-2)

这是手动插入,删除,更新和从Firebase数据库中选择的完整代码。 addvalueListner()用于从oncreate()开始时从数据库获取所有值。

public class MainActivity extends AppCompatActivity {

    EditText e1,e2,e3;
    Button b1,b2;
    int i;
   static int p=0;
    String key,s1,s2,s3;
    DatabaseReference databaseReference;
    DataSnapshot dsp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        e1=findViewById(R.id.editText);
        e2=findViewById(R.id.editText2);
        e3=findViewById(R.id.editText3);
        b1=findViewById(R.id.button);
        b2=findViewById(R.id.button2);
        databaseReference= FirebaseDatabase.getInstance().getReference().child("mydata");


        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            dsp=dataSnapshot;

          }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
   }

    public void selectdata(View view) {
                   s3=e3.getText().toString();
                    String s=dsp.child(s3).getValue().toString();
                    Toast.makeText(MainActivity.this, ""+s, Toast.LENGTH_SHORT).show();

              }

    public void removedata(View view) {

        s3=e3.getText().toString();
        databaseReference.child(s3).removeValue();
        Toast.makeText(MainActivity.this, "remove data", Toast.LENGTH_SHORT).show();

    }

    public void insertperticul(View view) {

        p=0;

      s1=e1.getText().toString();
      s2=e2.getText().toString();
      s3=e3.getText().toString();

       for(DataSnapshot childdata: dsp.getChildren())
       {
           key=childdata.getKey().toString();
            if(s3.equals(key))
            {
                p=1;
                Toast.makeText(this, "User exist", Toast.LENGTH_SHORT).show();
                break;
            }

       }
       if(p==0)
       {
           User user=new User(s1,s2);
           databaseReference.child(""+s3).setValue(user);
       }
    }

    public void updatedata(View view) {

        s1=e1.getText().toString();
        s2=e2.getText().toString();
        s3=e3.getText().toString();
        for(DataSnapshot childdata: dsp.getChildren())
        {
            key=childdata.getKey().toString();
            if(s3.equals(key))
            {

                User user=new User(s1,s2);
                databaseReference.child(""+s3).setValue(user);

                Toast.makeText(this, "data updated", Toast.LENGTH_SHORT).show();
                break;
            }

        }
    }
}



public class User {
    String name;
    String email;

    public User()
    {

    }
    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:layout_editor_absoluteY="81dp">

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="39dp"
        android:ems="10"
        android:hint="enetr name"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="28dp"
        android:ems="10"
        android:hint="enter email"
        android:inputType="textPersonName"
        app:layout_constraintStart_toStartOf="@+id/editText"
        app:layout_constraintTop_toBottomOf="@+id/editText" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="selectdata"
        android:text="Select"
        app:layout_constraintBaseline_toBaselineOf="@+id/button"
        app:layout_constraintEnd_toEndOf="@+id/editText3" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="19dp"
        android:onClick="removedata"
        android:text="Remove"
        app:layout_constraintBottom_toTopOf="@+id/button6"
        app:layout_constraintStart_toStartOf="@+id/button" />

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="19dp"
        android:onClick="insertperticul"
        android:text="Insert"
        app:layout_constraintBottom_toTopOf="@+id/button6"
        app:layout_constraintStart_toStartOf="@+id/button2" />

    <EditText
        android:id="@+id/editText3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="19dp"
        android:ems="10"
        android:hint="Enetr Id"
        android:inputType="textPersonName"
        app:layout_constraintStart_toStartOf="@+id/editText2"
        app:layout_constraintTop_toBottomOf="@+id/editText2" />

    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="60dp"
        android:onClick="updatedata"
        android:text="Update"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>