Java 如何将数据列表从一个数据库复制到另一个数据库,而不获取密钥0 1 2 3等等

Java 如何将数据列表从一个数据库复制到另一个数据库,而不获取密钥0 1 2 3等等,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在尝试将数据从一个实时数据库复制到另一个实时数据库。但问题是,每当我将数据保存到另一个数据库时,它的键都会变成数值,比如01 2 3等等 我想用相同的密钥将相同的数据复制到另一个数据库中,请帮助我,下面给出两个屏幕截图,以了解更多说明 看看我做了什么 List<CategoryModel> categorymodel = new ArrayList<>(); DATA_BASE_1.child("Categories").addCh

我正在尝试将数据从一个实时数据库复制到另一个实时数据库。但问题是,每当我将数据保存到另一个数据库时,它的键都会变成数值,比如01 2 3等等

我想用相同的密钥将相同的数据复制到另一个数据库中,请帮助我,下面给出两个屏幕截图,以了解更多说明


看看我做了什么

List<CategoryModel> categorymodel = new ArrayList<>();
     DATA_BASE_1.child("Categories").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                 CategoryModel value = dataSnapshot.getValue(CategoryModel.class);
                categorymodel.add(value);
                DATA_BASE_2.child("Categories").setValue(categorymodel).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                 
                    }
                });
              

                 
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

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

            }
        });
List categorymodel=new ArrayList();
数据库1.child(“类别”).addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildaded(@NonNull DataSnapshot DataSnapshot,@null字符串s){
CategoryModel值=dataSnapshot.getValue(CategoryModel.class);
类别模型添加(值);
Database_2.child(“Categories”).setValue(categorymodel).addOnCompleteListener(新OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
}
});
}
@凌驾
public void onChildChanged(@NonNull DataSnapshot DataSnapshot,@null字符串s){
}
@凌驾
公共void onChildRemoved(@NonNull DataSnapshot DataSnapshot){
}
@凌驾
public void onChildMoved(@NonNull DataSnapshot DataSnapshot,@null字符串s){
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});

请帮我解决这个问题

现在它变为0,而不是AI&ML

发生这种情况是因为您正在数据库中写入
List
的“categorymodel”对象。执行此写操作时,列表在数据库中成为一个数组,因此这些数字1、2、3实际上是数组的索引。您需要的是使用
映射执行对数据库的写入操作,其中键是一个字符串,该字符串保存AI&ML的值,该值是CategoryModel类型的对象。这样,您将获得第一个共享屏幕截图中存在的数据库结构。有关更多信息,请参阅将数据写入Firebase的官方文档:


我想实现如图1所示的数据库。这里categoryName本身对我来说是一个键值。是否仍要使用categoryName在数据库中设置值?是的,如第一张图片所示。对不起,我的错,我第二次写错了。是的,正如我在上面的回答中所解释的,它是使用地图的。你试过了吗?我这辈子都没试过地图。我从一些教程中学到了一些东西,但我发现所有的教程都只针对一个孩子,我的意思是我只能为一个孩子设置value(),但我有很多孩子(即,我有4个类别,因此我必须一次设置value(),4个孩子),然后我尝试了类似的方法,但它不起作用
y=categorymodel.size();对于(int x=0;x==y;x++){databaseReference.child(“Category”).child(categorymodel.get(x).getcategoryName()).setValue(categorymodel.get(x));}
要解决这个问题,您应该首先了解。一次,您知道如何填充映射,只需按照上面我的答案中的步骤,并将该映射传递给
setValue()
方法,对吗?