Обновление и удаление данных в Firebase

Это моя база данных:

{
  "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 ответов


для записи отдельных данных вы можете использовать setValue() метод DatabaseReference С идентификатором вашего ребенка:

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-объект(простой старый объект Java) со значениями каждого из элементов в базе данных. Например:

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 метод do. Это setValue () вызов по каждой строке в данной Map<String, Object> быть ключом полная ссылка узла и объекта значение.

вы можете прочитать больше обновления и удаления данных в официальном Firebase документация


Это полный код для вставки, удаления, обновления и выбора из базы данных 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>