当前位置: 首页 > 知识库问答 >
问题:

Firebase查询帮助我

凌智
2023-03-14
final int[] ndomande = {14};

//Database
mFirebaseInstance = FirebaseDatabase.getInstance();

final DatabaseReference Refndom = mFirebaseInstance.getReference("Dati");
final Query queryn = Refndom.orderByChild("numero_domande");

queryn.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        //Toast.makeText(PlayTest.this, "FIN QUI ",Toast.LENGTH_SHORT).show();

        for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) {
           // Toast.makeText(PlayTest.this, "QUI ",Toast.LENGTH_SHORT).show();

             long numero_domande = (long) messageSnapshot.getValue();
             ndomande[0] = (int) numero_domande;

            Toast.makeText(PlayTest.this, "quante domande ci sono totali: "+ numero_domande,Toast.LENGTH_SHORT).show();
        }

    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(PlayTest.this, "???", Toast.LENGTH_SHORT).show();
    }
});

//PROBLEM ON NDOMANDE 

Toast.makeText(PlayTest.this, "x: "+ ndomande[0] ,Toast.LENGTH_SHORT).show();
Random random = new Random();
final int x = random.nextInt(ndomande[0]);
 Toast.makeText(PlayTest.this, "x: "+ndomande[0] ,Toast.LENGTH_SHORT).show();

共有1个答案

贲凌
2023-03-14

要解决此问题,请将final int[]ndomande={14};数组的声明移到ondatachange()方法中,否则它将始终为null。

public void onDataChange(DataSnapshot dataSnapshot) {
    //Toast.makeText(PlayTest.this, "FIN QUI ",Toast.LENGTH_SHORT).show();
    final int[] ndomande = {14};

    for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) {
        //Toast.makeText(PlayTest.this, "QUI ",Toast.LENGTH_SHORT).show();

        long numero_domande = (long) messageSnapshot.getValue();
        ndomande[0] = (int) numero_domande;

        Toast.makeText(PlayTest.this, "quante domande ci sono totali: "+ numero_domande,Toast.LENGTH_SHORT).show();
    }
}

这是由于ondatachange()方法的异步行为造成的,甚至在试图从该数组获取值之前就调用了该方法。在方法内部移动声明并在那里使用它,就可以解决问题。

如果您想在该方法之外使用该数组的值,请看一下我在这篇文章中的回答,如何在onDataChange()方法之外获得异步值。

 类似资料:
  • 问题内容: 我正试图消除我的SQL技能,并需要以下查询的帮助。我当前使用的数据库是mysql。 我想检索所有同时分配了’tag2’和’tag4’的抽认卡。根据现有表的内容(如以下摘录所示),查询应返回两行:FlashCard_ID 1和2。 我将如何制定此查询?自从我不得不做这样的事情已经有一段时间了。 问题答案:

  • 我有3张桌子 许可证中的CREATED_AT是一个日期(非空)字段。 表根据同名主键/外键进行关联;客户可以拥有0个或多个许可证,每个许可证都有一个版本。 我想从这些表格中得到: 客户的名字、姓氏和创建的最后一个许可证的release\u id(根据许可证中的created\u AT字段查找最后一个),如果有。 对于这个问题,我使用了以下查询: 这似乎有效,但我问是否有人可以证实我这一点,或者是否

  •   如欲对系统中各运行支持库内的命令、库定义数据类型、库定义常量等等信息进行查找,请在易系统启动后使用以下方法之一: 直接在工作夹内的支持库夹中单击对应的所欲查找其信息的项目,此时所有的相关信息将会显示在系统的提示夹或者状态行中,如下图,光标处; 如果欲将这些信息提取出来打印或者以后阅读,请在相应项目上单击鼠标右键,在所弹出的菜单中选择“拷贝帮助文本到剪贴板”或者“写帮助文本到文件”功能输出与该项

  • 问题内容: 我想从t1中获取名称,并在t2中获得与ID在t1上相同的行数。 到目前为止,我已经掌握了上述内容,但是如果t2中没有匹配的行,它将不会返回任何数据。如果没有行,则我希望将其设置为0(或NULL),并且名称仍然返回。 编辑: 我希望能够按降序排序。(或ASC)可行吗? 问题答案: 这应该为您工作: 左联接确保您拥有t1中的所有行,而COUNT(。)使其仅计算t2.id不为null的记录(

  • 问题内容: 我需要从下表中删除半重复记录 对于存在的任何重复PID,我想删除最低得分记录。在上面的示例中,将删除ID 1。我试图提出一种不使用循环的方法,但确实很挣扎。 任何帮助,将不胜感激。 谢谢 问题答案:

  • 问题内容: 假设我有两个表,其中一个表包含名为column_period的以下列: tenant_trading_name,suite_id,lease_id,building_id 另一个名为lease_period_audit,具有以下内容: audit_date,audit_type,tenant_trading_name,suite_id,lease_id,building_id 每次在l