第一次更新后未触发Firebase数据库onChildChanged()

时间:2018-07-31 06:08:05

标签: android firebase firebase-realtime-database

我在Firebase Realtime数据库中添加了数据,并使用以下代码设置了addChildEventListener

private DatabaseReference mFirebaseDatabaseRef;

mFirebaseDatabaseRef = FirebaseDatabase.getInstance().getReference("user").child("details");
for (int i = 0; i < result.size(); i++) {
                String id = mFirebaseDatabaseRef.push().getKey();

                String name = result.get(i).getName();

                Details details = new Details();
                appDetails.setName(name);
                appDetails.setLabel(result.get(i).getLabel());
                appDetails.setIconbase64(result.get(i).getIconbase64());
                mFirebaseDatabaseRef.child(id).setValue(details );
            }
addEventListener();

添加Child事件侦听器方法。

private void addEventListener() {

    mFirebaseDatabaseRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Log.d("Realtime", "s");
        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Log.d("Realtime", "s");
            Toast.makeText(mContext, "Child Changed", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
            Log.d("Realtime", "s");
        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Log.d("Realtime", "s");
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d("Realtime", "s");
        }
    });
}

现在,当我更改数据库中的数据时,onChildChanged中的addChildEventListener仅被第一次调用。但是当我再次更改Datbase中的数据时,没有触发任何onChildChanged

  

我每次在更新数据时都想触发onChildChanged   Datbase。

2 个答案:

答案 0 :(得分:0)

您需要使用onChildAdded()方法而不是onChildChanged()方法来调用数据

 private void addEventListener() {

        mFirebaseDatabaseRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                Log.d("Realtime", "s");
Toast.makeText(mContext, "Child Changed", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                Log.d("Realtime", "s");
                Toast.makeText(mContext, "Child Changed", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                Log.d("Realtime", "s");
            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                Log.d("Realtime", "s");
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d("Realtime", "s");
            }
        });
    }

答案 1 :(得分:0)

我找到了解决方案,

出于某些主要原因,我重新启动了应用程序。

所以我再次在onCreate方法中添加addChildEventListener,所有内容都按预期运行。