作者:RvJ手机用户2997047695f | 来源:互联网 | 2023-02-12 13:31
1> Frank van Pu..:
数据是从Firebase异步加载的.到运行时title = a
,该onDataChange
方法尚未被调用.在调试器中设置一些断点来验证这一点,这是理解异步加载如何工作的关键.
解决方案是重新解决你的问题,从"首先得到对象,然后用标题做blabla"来"开始获取对象;一旦对象可用,就用标题做blabla".
在代码中,这转换为:
final DatabaseReference mPostReference = FirebaseDatabase.getInstance().getReference().child("user-daily").child(getUid()).child("2017-Year");
mPostReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final ArrayList labels = new ArrayList();
for (DataSnapshot data : dataSnapshot.getChildren()){
final DailyItem dailyItem = data.getValue(DailyItem.class);
labels.add(dailyItem.mese);
}
title.setText(labels.get(position));
// Do blabla with the title
String title = title.getText().toString();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(view.getContext(),"database error",
Toast.LENGTH_SHORT).show();
}
});
许多开发人员对Firebase(以及其他现代Web API,因为他们都以这种方式工作)不熟悉这个问题.所以我建议你也看看他们的问题和答案:
无法访问set之外的firebaseObjectObservable
Android Firebase获取没有DataChange的子级值
全局变量的值在ValueEventListener中初始化后重置
无法从ondatachange方法中获取值
ArrayList不在onChildAdded函数内更新
在Firebase侦听器中设置Singleton属性值
此搜索结果列表中的大多数其他人