如何在Android中将Firebase子项从一个节点移动到另一个节点?

Sha*_*ada 5 java android firebase firebase-realtime-database

我正在开发一个项目,用户请求我们的代客服务,另一方面代客接受请求.

我使用Firebase作为后端,并根据要求客户uid保存在'request'孩子.

当代客接受请求时,客户uid应从"请求"节点移动到"正在进行"节点.

我怎样才能做到这一点?

小智 6

我建议使用这个:

public void moveFirebaseRecord(Firebase fromPath, final Firebase toPath)
{
    fromPath.addListenerForSingleValueEvent(new ValueEventListener()
    {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            toPath.setValue(dataSnapshot.getValue(), new Firebase.CompletionListener()
            {
                @Override
                public void onComplete(FirebaseError firebaseError, Firebase firebase)
                {
                    if (firebaseError != null)
                    {
                        System.out.println("Copy failed");
                    }
                    else
                    {
                        System.out.println("Success");
                    }
                }
            });
        }

        @Override
        public void onCancelled(FirebaseError firebaseError)
        {
            System.out.println("Copy failed");
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这来自这个来源:https://gist.github.com/katowulf/6099042.我在我的JavaEE代码和我的Android应用程序中多次使用它.

您传递了fromPath和toPath.这是一个复制品而不是一个动作,因此原件也将保留在原来的位置.如果要删除,可以在System.out.println("Success")之后对fromPath执行设置值; .


Mat*_*hoa 6

从编译firebase-database:11.0.1开始,这与新类引用的功能相同(https://firebase.google.com/support/guides/firebase-android 2017年7月5日)

private void moveGameRoom(final DatabaseReference fromPath, final DatabaseReference toPath) {
        fromPath.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                toPath.setValue(dataSnapshot.getValue(), new DatabaseReference.CompletionListener() {
                    @Override
                    public void onComplete(DatabaseError firebaseError, DatabaseReference firebase) {
                        if (firebaseError != null) {
                            System.out.println("Copy failed");
                        } else {
                            System.out.println("Success");

                        }
                    }
                });

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
Run Code Online (Sandbox Code Playgroud)