java - 从 2D ArrayList Android 中的实时数据库中检索字符串
问题描述
我有一个这样的 Firebase 实时数据库结构:
如何使用 Java 将其检索到像这样的 2D ArrayList 中。
private String mChoices [][] = {
{"Mutare", "Harare", "Bulawayo","Mozambique"},
{"Johhannesburg", "Pretoria", "Duran","Capetown"},
{"Nairobi", "Lusaka", "Windhoek","Lilongwe"},
{"Harare", "Lilongwe", "Pretoria","Nairobi"}
};
解决方案
正如@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);
此代码的结果将是您要查找的确切二维数组。
推荐阅读
- php - 用Hebew,英文和字符验证图像路径的正则表达式
- kubernetes - kubernetes:如何从附加的 pod 中分离
- dafny - 在 dafny 中评估后缀语言的递归算法
- css - 在方括号 IDE 中设置字体系列
- sql - 如何检查 MariaDB 语法错误(错误代码 1064)?
- jekyll - Jekyll 在某些机器上创建绝对路径
- flutter - Dart 扩展 - 没有为类型 'xxx' 定义方法 'xxx'
- phpmyadmin - 数据库错误:Roundcube 上的连接失败
- sql - SQL“本地报表处理过程中发生错误”
- raspberry-pi - 实现树莓派 3b+ 工业化的最佳方式