对Firebase数据库的onClick更新不起作用

时间:2018-09-12 22:15:37

标签: android firebase firebase-realtime-database

我正在尝试使用更新按钮的identity方法更新用户的onClick值,但是它不起作用并且没有值正在更新。

这是我的活动(我使用查询来获取用户的唯一ID):

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 :(得分:1)

这里的问题是您使用的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");
                            }
                        });

也可以使用uidYouWantquery来遍历所有节点来获取所需的节点,而不是使用orderByChild(),就像这样:

equalTo()