Firebase - 在 Android 中检索数据

2023-12-31

我有一个数据看起来像这样:

{
 "courses" : {
    "Business" : {
      "-KOBuojCGl_KVNgCx6l3" : {
        "courseCode" : "BUS2202",
        "courseName" : "Business Mathematics"
      },
      "-KOCH9RvYkwIamb0oxi8" : {
        "courseCode" : "BUS2302",
        "courseName" : "Business Fundamentals"
      }
    },
    "Computing & IT" : {
      "-KOBukFDN8eDjzF77haS" : {
        "courseCode" : "SDT2201",
        "courseName" : "System Designs"
      },
      "-KOBuriS_C5njfhAkV_P" : {
        "courseCode" : "SDT3201",
        "courseName" : "Computer Project"
      },
      "-KOD-E81rtXhzEmSeRPx" : {
        "courseCode" : "SDT2202",
        "courseName" : "System Designs Year 2"
      },
    }
  }
}

用户界面如下所示:

当用户选择业务基础知识时,textview1应显示 BUS2302 和textview2应显示业务基础知识。

我现在正在尝试的代码:

public class MainActivity extends AppCompatActivity{

    private TextView tv1, tv2;
    private DatabaseReference mRef;
    private String code, name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRef = FirebaseDatabase.getInstance().getReference().child("courses").child("Business");
        tv1 = (EditText) findViewById(R.id.textview1);
        tv2 = (EditText) findViewById(R.id.textview2);

        mRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                CourseDetails courseDetails = dataSnapshot.getValue(CourseDetails.class);
                code = courseDetails.getCourseCode();
                name = courseDetails.getCourseName();
                tv1.setText(code);
                tv2.setText(name);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

CourseDetails class:

public class CourseDetails {
    private String courseCode;
    private String courseName;

    public CourseDetails() {
    }

    public CourseDetails(String courseCode, String courseName) {
        this.courseCode = courseCode;
        this.courseName = courseName;
    }

    public String getCourseCode() {
        return courseCode;
    }

    public void setCourseCode(String courseCode) {
        this.courseCode = courseCode;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }
}

当我运行代码时,两个文本视图都为空白,并且没有错误消息。当我改变的时候mRefValueEventListener 对此:

mRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                tv1.setText(dataSnapshot.getValue().toString());
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

打印出的整个 JSON 数据textview1,所以我知道我的数据在那里。但是当我使用getCourseCode() and getCourseName(),文本视图是空白的。有什么建议么?

我还有另一个问题,这些代码将用于获取push key课程,然后只显示相应的课程代码和名称。问题可以找到here https://stackoverflow.com/questions/38808970/android-get-push-key-based-on-a-child-firebase/38809229#38809229


在您的 mRef 的 MainActivity 中,它引用直到数据库的节点业务,该数据库还有两个子项,其密钥我认为是使用生成的push。所以,我认为你必须迭代它的孩子。你可以尝试如下所示的方法吗:

 mRef.addValueEventListener(new ValueEventListener() {
 @Override
 public void onDataChange(DataSnapshot dataSnapshot) {
   // for each children
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

        CourseDetails courseDetails = snapshot.getValue(CourseDetails.class);
        code = courseDetails.getCourseCode();
        name = courseDetails.getCourseName();
        tv1.setText(code);
        tv2.setText(name);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

}

如果这给出了除 null 之外的一些结果,则可能需要将 textView 映射到相应的键。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase - 在 Android 中检索数据 的相关文章

  • 使用 setMessage() 在 AlertDialog 中显示多行文本和变量

    我需要在警报对话框中显示多行文本 如果我使用多个 setMessage 方法 则仅显示最后一个 setMessage 如下所示 final AlertDialog alertDialog new AlertDialog Builder th
  • 更新房间迁移的行

    是否可以编写迁移来更新某个表的所有先前数据 我正在为我的房间数据开发加密 如果我可以在迁移后加密所有行 那就太好了 那么 在定义迁移时 您可以访问支持SQLite数据库 https developer android com referen
  • Kotlin 协程 - 优雅地处理挂起函数中的错误

    尝试使用从异步方法调用的挂起函数来实现对错误的优雅处理 如何捕获挂起方法引发的错误 suspend fun findById id Long User throw Exception my exception intentionally t
  • 文件 API - Phonegap?

    谁能解释如何使用适用于 Android 的 Phonegap 文件 API 在页面上列出文件文件夹 我想列出所有 mp3如果可能的话 请阅读文件 但已阅读所有phonegap文档 http docs phonegap com en 1 0
  • 如何让精灵对 cocos2d android 中的触摸做出反应?

    我有 1 支枪 当点击屏幕上的任何一点时 子弹都会发射 但根据我的要求 有 3 支枪 精灵 当触摸任何精灵时 子弹必须发射 当谷歌搜索时 我知道这可以是通过使用targetedTouchDelegate或循环所有的精灵并为每个触摸的精灵设置
  • 使用书法库的某些活动使用不同的字体

    我在用书法 https github com chrisjenx Calligraphy在我的应用程序中使用自定义字体的库 我使用默认字体为整个应用程序设置了自定义字体CalligraphyConfig in my Application类
  • 将倒计时器从 10 秒改为 1 秒

    我有一个倒计时器 它以 1 秒的增量从 10000 毫秒倒计时到 0 毫秒 以使按钮在 10 秒后可单击 尽管计时器是准确的并且按照代码的说明执行操作 但我想更改秒的表示方式 但我不知道如何更改 java void startTimer c
  • 从布局中添加和删除视图

    如何从布局中添加和删除视图 我是这样做的 ViewManager entry getParent removeView entry
  • 来自 InputStream 的 Android 通用图像加载器 URI

    我想问一下UIL URI是从InputStream输入的 因为我的图像源来自 ZIP 然后我必须提取它才能显示该图像 因为图像太大 我必须使用UIL库 任何人都知道如何从InputStream插入UIL 我认为你可以这样做类似于从数据库加载
  • 是否可以限制用户登录 Firebase 应用的设备数量?

    语境 我正在帮助使用 Vue 更新 Cordova 应用程序 以从基于订阅的收入 用户必须付费才能访问该应用程序 转变为基于广告的收入 用户可以免费注册 但将拥有他们在使用应用程序时显示的广告 我们想要做的一部分是限制用户可以拥有帐户的设备
  • AWS Cognito-获取带有ID的用户信息

    有没有什么方法可以获取 AWS Cognito 池 在 Android 上 中未登录的用户的信息 并知道他的 ID 我尝试了该代码 AppHelper getPool getUser username getDetailsInBackgro
  • 具有线程安全性的 eventbus 最佳实践

    我的应用程序具有用户交互活动和后台服务 这是修改数据模型的唯一地方 后台服务监听用户所做的操作以及来自网络的传入消息 因此 可能会出现并发问题 我尝试使用处理程序来防止这些问题 对于事件层 我使用 greenrobots Eventbus
  • Google Play 将我的应用程序版本显示为“随设备而变化”

    我最近在 Google Play 商店更新了我的应用程序 在我的 Play 商店应用程序页面中 版本显示为因设备而异我没有上传多个 apk 而是使用单个 apk 更新了我的应用程序 那么为什么它显示版本为因设备而异 是否有任何设置可以删除此
  • AppWidget 中的进度条

    我在应用程序小部件中使用 ProgressBar 时遇到了一个有趣的情况 文档 http developer android com guide topics appwidgets index html http developer and
  • 是否可以自定义首选项标题布局?

    我发现了类似的问题 但找不到最新的具体答案 我在用着
  • 当 SystemUI 在 Android Boot 中加载时

    如何知道系统 UI 何时加载Android启动过程 状态栏和导航栏视图到底绘制在哪里 作为SystemUI是一个特权应用程序 那么它是否在启动器应用程序 主屏幕 启动之前加载 我不知道 欢迎任何建议 下面是一系列简要解释的步骤 希望能够阐明
  • 同一活动中的多个日期选择器

    我对 Android 平台完全陌生 在学习开发过程的同时一直在构建应用程序 目前 我正在开展一项活动 需要部署 2 个日期选择器 一个是 开始日期 另一个是 结束日期 我一直在关注 Android 开发者页面上的 DatePicker 教程
  • 从 SD 卡读取 pdf 文件

    我想阅读存储在 SD 卡中的 pdf 文件 我尝试使用此代码片段 File file new File Environment getExternalStorageDirectory vvveksperten ypc pdf Package
  • onActivityResult() Intent 数据始终为 null

    有人可以告诉我为什么Intent data总是为空 Override protected void onActivityResult int requestCode int resultCode Intent data super onAc
  • Android ACTION_MOVE阈值

    我正在编写一个应用程序 需要使用手指或最终使用手写笔在屏幕上书写 我有那部分工作 在 ACTION DOWN 时 开始绘制 在 ACTION MOVE 上 添加线段 在 ACTION UP 上 完成该行 问题是 在 ACTION DOWN

随机推荐

  • 如何在文件更改时更新 UI

    你好 我正在使用几个 Excel 文件构建一个闪亮的仪表板 我在框的页脚中插入了这些文件的链接 我想refresh更改我的 Excel 文件中的某些内容时的闪亮仪表板 我不想每次都运行整个 R 代码 文件内容更改后如何重新渲染输出 这里有一
  • ColladaLoader 和 ProgressCallback

    实施的正确方法是什么加载栏 in ColladaLoader 源代码显示加载器采用三个参数 其中一个是progressCallback progressCallback total length loaded request respons
  • pyglet on_draw 事件仅在鼠标移动时发生

    我有一个奇怪的问题 当 pyglet 应用程序启动时 它只绘制 1 2 帧然后冻结 on draw 事件停止发生 但每次我移动鼠标或按键时 on draw 事件也会调度 简而言之 我必须移动鼠标才能使我的 pyglet 应用程序基本工作 这
  • NHibernate.MappingException:没有持久化:XYZ

    现在 在你说之前 我did谷歌和我的hbm xml file is嵌入式资源 这是我调用的代码 ISession session GetCurrentSession var returnObject session Get
  • 使用 C 从文本文件中打印出数组

    我正在尝试创建一个代码 它从纺织品中读取数据 然后将数据存储到内存中 打印到屏幕上以便用户可以读取它 但它仍然保存到内存中 以便您可以将其用于其余部分节目的 这是纺织品的样品 75 nevermind nvm not much nm no
  • 在Java中获取文件/目录所有者的名称[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 OSX 上的 Java 中获取文件所有者的名称 https stackoverflow com questions 3096805 how do i get the name of a fil
  • 类型错误:canvas.getContext 不是函数

    我正在尝试使用 canvas 元素在 Javascript 中为跟随光标的球设置动画 我将对画布对象的引用传递给名为 followMouse 的函数 但是当我尝试获取其上下文时 firebug 给出了以下错误 类型错误 canvas get
  • C++ TR1 正则表达式 - 多行选项

    我认为 表示字符串的结尾 然而 下面的代码给出了 testbbbccc 作为结果 这对我来说非常令人惊讶 这意味着 实际上匹配行尾 而不是整个字符串的结尾 include
  • JUnit:4.8.1“找不到类”

    好吧 我和其他人一样 是 jUnit 的新手 并且很难让它正常工作 我搜索过论坛但提供了答案 我只是不明白 如果有人可以帮助我 我将不胜感激 让我提供基础知识 操作系统 Mac OS X 6 export JUNIT HOME Develo
  • Listviewdefs 中的 SugarCRM Smarty 代码

    我正在尝试使用 Smarty PHP 在 SugarCRM 6 5 3 的 ListView custom modules Leads metadata listviewdefs php 中实现自定义功能 这工作正常 customCode
  • 方法返回类型以满足多个接口

    是否可以指定一个返回实现两个或多个接口的对象的方法 假设我们有以下接口 interface FooBar Foo Bar getFooBar interface Foo void doFoo inteface Bar void doBar
  • 如何从在线下载视频并将其存储在本地设备上,然后使用视频播放器在 Flutter 应用程序上播放视频?

    我想开发一个 flutter 应用程序 用户可以通过一个按钮从在线下载所有视频并将其存储在本地设备上 然后在 Flutter 应用程序上使用视频播放器离线播放这些视频 我通过资产视频做到了这一点 但如果我使用资产中的视频并构建应用程序 那么
  • 红宝石冻结方法

    def track for stat This is a hash with 2 elements of proc symbol gt send stat array gt send stat 0 stat 1 freeze stat cl
  • 多个域上的域级会话 cookie

    如果您希望 ColdFusion 将会话 cookie 创建为域级别 cookie 例如 bar com 而不是 foo bar com 那么您可以在 jrun web xml 中配置它
  • F#:使用可区分联合解构绑定

    open System let x 1 2 let p q x printfn A A x printfn B A A p q let y Some 1 2 try let None y with ex gt printfn C A ex
  • AS3 JSON解析

    我有点进退两难 我有一个 JSON 对象 其格式我不熟悉 以数组开头 而不是一个物体 并且想知道如何在 AS3 中解析它 该对象看起来像 food name pasta price 14 50 quantity 20 name soup p
  • 解密 aws kms 密钥时出现 Nodejs 异步问题

    我在node6中有一个lambda函数 它有5个环境变量 全部用aws kms加密 我有以下方法 它接受加密的密钥并返回解密的密钥 function decryptKMS encryptedKey console log inside de
  • 关闭Redis

    今天我第一次在本地计算机上启动 Redis 然后在关闭 Rails 应用程序后关闭了所有终端窗口 一个小时后 我再次启动Rails应用程序并执行以下操作来启动redis服务器 redis server usr local etc redis
  • 在 LINQ 查询中使用组

    我正在使用 LINQ to CRM 提供商 我正在查询信息 然后使用 LINQ 来查询 LINQ to CRM 查询 以便我可以使用 GroupBy 因为 LINQ to CRM 提供程序不支持它 这是我到目前为止所拥有的 var linq
  • Firebase - 在 Android 中检索数据

    我有一个数据看起来像这样 courses Business KOBuojCGl KVNgCx6l3 courseCode BUS2202 courseName Business Mathematics KOCH9RvYkwIamb0oxi8