首页 > 解决方案 > 从 2D ArrayList Android 中的实时数据库中检索字符串

问题描述

我有一个这样的 Firebase 实时数据库结构:

Firebase 结构

如何使用 Java 将其检索到像这样的 2D ArrayList 中。

private String mChoices [][] = {
        {"Mutare", "Harare", "Bulawayo","Mozambique"},
        {"Johhannesburg", "Pretoria", "Duran","Capetown"},
        {"Nairobi", "Lusaka", "Windhoek","Lilongwe"},
        {"Harare", "Lilongwe", "Pretoria","Nairobi"}
};

标签: javaandroidfirebasefirebase-realtime-database

解决方案


正如@SardorbekKhujaev 在他的回答中提到的,数组是固定的数据类型。为了解决这个问题,我们需要使用 ArrayList,因为大小可以动态增加。填充 ArrayList 后,我​​们可以简单地将其转换为 2D 数组,如下面的代码行所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference choicesRef = rootRef.child("choices");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String[]> choices = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            int size = (int) ds.getChildrenCount();
            String[] choice = new String[size];
            int count = 0;
            for(DataSnapshot dSnapshot : ds.getChildren()) {
                choice[count++] = dSnapshot.getValue(String.class);
            }
            choices.add(choice);
        }
        String choicesArray[][] = new String[choices.size()][];
        for (int j = 0; j < choices.size(); j++) {
            choicesArray[j] = choices.get(j);
        }
        //Test the array
        for(String[] array : choicesArray) {
            Log.d(TAG, Arrays.toString(array));
        }
        //Do what you need to do with your 2D array
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
choicesRef.addListenerForSingleValueEvent(valueEventListener);

此代码的结果将是您要查找的确切二维数组。


推荐阅读