Index:0 Size:0 从 firebase 获取项目时
Index:0 Size:0 when fetching item from firebase
我正在尝试像这样从 firebase 获取值:
private String getVCount(String mPath) {
ArrayList<String> strings = new ArrayList<>();
FirebaseDatabase.getInstance().getReference("cars").child(mPath).child("maserati")
.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull @NotNull Task<DataSnapshot> task) {
if(task.isSuccessful()){
strings.add(task.getResult().getValue().toString());
}else{
strings.add("0");
}
}
});
Log.d("mString", String.valueOf(strings.size()));
return strings.get(0);
}
我仔细检查了路径,甚至添加了一个 else 条件只是为了使字符串数组列表中至少有一个值。
数据库中的值确实存在,而在某些情况下不存在——因此else语句添加一个默认值值为 0。我不确定这是否是正确的方法。
此外,我仍然收到错误:索引:0 大小:0——表示字符串数组列表为空。
知道为什么会这样吗?
谢谢。
从 Firebase 实时数据库获取数据是一项异步任务。所以,
Log.d("mString", String.valueOf(strings.size()));
return strings.get(0);
可能在 addOnCompleteListener
.
中的代码之前被调用
如果您想让 getVCount
有办法获得 return 结果,一种方法是创建您自己的回调,如下所示:
public interface Callback {
void onCallback(String result);
}
private void getVCount(String mPath, Callback callback) {
ArrayList<String> strings = new ArrayList<>();
FirebaseDatabase.getInstance().getReference("cars").child(mPath).child("maserati")
.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull @NotNull Task<DataSnapshot> task) {
if(task.isSuccessful()){
strings.add(task.getResult().getValue().toString());
}else{
strings.add("0");
}
Log.d("mString", String.valueOf(strings.size()));
callback.onCallback(strings.get(0));
}
});
}
并这样称呼它:
getVCount(new Callback() {
@Override
public void onCallback(String result) {
Log.d(TAG, result);
}
});
我正在尝试像这样从 firebase 获取值:
private String getVCount(String mPath) {
ArrayList<String> strings = new ArrayList<>();
FirebaseDatabase.getInstance().getReference("cars").child(mPath).child("maserati")
.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull @NotNull Task<DataSnapshot> task) {
if(task.isSuccessful()){
strings.add(task.getResult().getValue().toString());
}else{
strings.add("0");
}
}
});
Log.d("mString", String.valueOf(strings.size()));
return strings.get(0);
}
我仔细检查了路径,甚至添加了一个 else 条件只是为了使字符串数组列表中至少有一个值。
数据库中的值确实存在,而在某些情况下不存在——因此else语句添加一个默认值值为 0。我不确定这是否是正确的方法。
此外,我仍然收到错误:索引:0 大小:0——表示字符串数组列表为空。
知道为什么会这样吗?
谢谢。
从 Firebase 实时数据库获取数据是一项异步任务。所以,
Log.d("mString", String.valueOf(strings.size()));
return strings.get(0);
可能在 addOnCompleteListener
.
如果您想让 getVCount
有办法获得 return 结果,一种方法是创建您自己的回调,如下所示:
public interface Callback {
void onCallback(String result);
}
private void getVCount(String mPath, Callback callback) {
ArrayList<String> strings = new ArrayList<>();
FirebaseDatabase.getInstance().getReference("cars").child(mPath).child("maserati")
.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull @NotNull Task<DataSnapshot> task) {
if(task.isSuccessful()){
strings.add(task.getResult().getValue().toString());
}else{
strings.add("0");
}
Log.d("mString", String.valueOf(strings.size()));
callback.onCallback(strings.get(0));
}
});
}
并这样称呼它:
getVCount(new Callback() {
@Override
public void onCallback(String result) {
Log.d(TAG, result);
}
});