我正试图从firebase数据库中获取项目列表。。。但我很难得到它们。我的代码大致如下:
List<Items> itemsList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_work_items_report);
itemsList = GetItems();
}
应该返回我的项目的方法如下所示:
private ArrayList<Items> GetItems(){
DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = database.child("items");
final ArrayList<Items> itemsRez = new ArrayList<Items>();
Query itemsQuery = ref.orderByChild("type");
itemsQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
Items item = singleSnapshot.getValue(Items.class);
itemsRez.add(item);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return itemsRez;
}
GetItems()总是返回一个空列表,这有点道理,因为在我返回这个列表之前,没有什么可以触发onDataChange事件,所以我的问题是。。。如何使用此方法从DB返回项目列表?
当您调用addListenerForSingleValueCase()
时,Firebase客户端会开始从服务器加载数据,这可能需要一些时间。为了防止阻止您的应用(这将导致应用程序不响应对话框),它会在单独的线程中加载数据。因此,当数据加载时,主线程继续运行并返回itemsRez
的当前状态,这是一个空列表。
如果在代码中添加一些日志语句,最容易看到这一点:
private ArrayList<Items> GetItems(){
DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = database.child("items");
final ArrayList<Items> itemsRez = new ArrayList<Items>();
Query itemsQuery = ref.orderByChild("type");
System.out.println("Attaching listener");
itemsQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
Items item = singleSnapshot.getValue(Items.class);
itemsRez.add(item);
}
}
System.out.println("Received "+itemsRez.size()+" items");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
System.out.println("Returning "+itemsRez.size()+" items");
return itemsRez;
}
与您可能期望的相反,这将按以下顺序打印日志:
附加侦听器
正在返回0个项目
收到的物品
解决问题的一个常见方法是重新定义代码的目标。不要写“首先获取项目,然后对其进行abc”,而是将代码写为“开始获取项目。然后当他们进来时,对其进行abc”。在代码中,这意味着您将需要itemsRec
的代码移动到onDataChange
方法中,在正确的时刻调用它:当项目已加载时。
另见:
问题内容: 我需要有关从此DataSnapshot结果中获取“消息”对象的帮助 我可以通过获取键值,并且也可以作为对象,这是FireBase自动生成的对象名称。而不是听对象本身。如何使用DataSnapshot成员方法浏览低谷,“发送者”或“消息”并获取其值? 问题答案: 我似乎在为具有多个子项的对象添加值侦听器。我猜这是一个查询,但是如果您在问题中包含代码,那将非常有帮助。但是,在您添加它之前,
我在数据库里有这个: 当教师添加一个类和一个节时,在节点下使用生成一个随机id。还有一个和一个节点,其中包含ID和属性。 学生加入了一个类,因此也在中创建了一个带有上述属性的随机id。 我使用以下代码: 我之所以有一个名字,是因为以后我想点击一个类,并获得该类中的名字列表。因此,如果我在ClassStudent节点中添加(已经完成了),那么在中没有studentname的情况下,我如何能够在单击时
我有一个firebase数据库,员工数据的结构如下。我还有一个用户表,它具有'Company ID'属性。每次用户登录时,我都希望获取与用户“公司ID”匹配的所有员工。是否有可能实现这使用firebase数据库规则或我必须写一些查询。
我正在尝试在Firebase中进行简单搜索以从我的Firebase数据中返回数据,但没有任何返回。 JSON结构 我的Firebase搜索代码如下 但一旦代码被执行,它就会返回null。还有一种方法可以搜索特定字段。
根据https://github . com/firebase/firebase ui-Android/tree/master/firestore上的指南,我用FirestoreRecyclerAdapter制作了一个项目列表,但我不知道为什么无法检索任何数据。事实上,数字视图项目显示正确,但内容总是空的。任何人都可以帮我。下面是源代码: 活动: 适配器: 数据模型:
问题内容: 我正在尝试使用sql语句从XML文档中获取特定数据。该文件如下: 我输入了sql查询以获取球体中值,如下所示: 但是我出错了 [错误]执行(4:17):ORA-19228:XPST0008-未声明的标识符:前缀’nsREF’本地名称’nsREF:Measure’ 您能帮我获得正确的价格吗 问题答案: Oracle安装程序 查询 : 输出 :