onClick Обновление базы данных Firebase не работает - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь обновить значение identity пользователя с помощью onClick метода кнопки обновления, но оно не работает и никакое значение не обновляется.

Вот мое действие (я использовал Запрос, чтобы получить уникальный идентификатор пользователя):

public class Update extends AppCompatActivity {

    EditText identity;
    DatabaseReference ref;
    Button update;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_check);

        update = (Button) findViewById(R.id.button_update);
        identity = (EditText) findViewById(R.id.edit_text_identity);

        mStorageRef = FirebaseStorage.getInstance().getReference("uploads");

        String key = getIntent().getExtras().get("androidId").toString();
        final Query userQuery = FirebaseDatabase.getInstance().getReference().child("Users").orderByChild("androidId");
        userQuery.equalTo(key).addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot foodSnapshot: dataSnapshot.getChildren()) {
                        final String userUID = foodSnapshot.getKey();
                        ref = FirebaseDatabase.getInstance().getReference().child(userUID);
                        identity.setText(getIntent().getStringExtra("identity"));

                        update.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                ref.child("identity").setValue("noo");
                            }
                        });
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {}
            }
        );
    }
}

Моя структура базы данных выглядит так:

{
  "Users" : {
    "uid1" : {
      "name" : "Josh",
      "identity": "yes"
    },
    "uid2" : {
      "name" : "June",
      "identity": "no"
    }
  }
}

И в logcat не отображается ошибка. В чем может быть проблема здесь?

1 Ответ

0 голосов
/ 13 сентября 2018

Проблема в том, что используемый вами ref не указывает точно на узел, который вы хотите обновить.Вы можете использовать это, чтобы сделать так:

update.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                            DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("Users").child(uidYouWant);
                                rootRef.child("identity").setValue("noo");
                            }
                        });

Также, чтобы получить uidYouWant вместо query, вы можете пройти по всем узлам, чтобы получить тот, который вы хотите, используя orderByChild() и equalTo() прямо так:

ref.orderByChild("androidID").equalTo(key).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        for(DataSnapshot data: dataSnapshot.getChildren()){
                           // do what you want to

                        }
                    }

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

                    }
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...