首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取Firebase值并在Android应用程序上显示图像

如何获取Firebase值并在Android应用程序上显示图像
EN

Stack Overflow用户
提问于 2022-04-27 10:31:05
回答 1查看 26关注 0票数 0

Android应用程序和Firebase连接在一起。

当Arduino火焰检测传感器检测到火焰时,Firebase中的数据值(名称:"state")从1变为0,如下所示:

当这个值(“state”)更改为0时,我想在Android应用程序中自动显示图像。

这是我的密码

代码语言:javascript
复制
package com.example.framelayoutex;

public class MainActivity extends AppCompatActivity {

  private DatabaseReference mDatabase;
  private FirebaseDatabase mFirebaseDatabase;

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

  private void readState(String state){
      TimerTask task = new TimerTask() {
          @Override
          public void run() {
              /*You're only going to get the last value of 'state'*/
              mDatabase.child("state").limitToLast(1).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
                  @Override
                  public void onComplete(@NonNull Task<DataSnapshot> task) {
                      ImageView imageView = findViewById(R.id.fire);
                      if (task.isSuccessful())/*Communication with Firebase succeeded*/ {
                          Log.d("firebase", String.valueOf(task.getResult().getValue()));
                          int firescan = (int) task.getResult().getValue();
                          if (firescan == 0){
                              imageView.setVisibility(View.VISIBLE);
                          }
                          else{
                              imageView.setVisibility(View.INVISIBLE);
                          }
                      }
                      else {
                          Log.e("firebase", "Error getting data", task.getException());/*Communication with Firebase failed*/
                      }
                  }
              });
          }
      }; 
  }
}

我获得了火基状态的最后一个值,并将其放入一个名为firescan的int类型变量中,如果firescan为0,则图像是可见的,如果为1,则图像是不可见的。

它运行时没有错误,但是图像没有按需要改变。

我想知道为什么,但我是初学者,所以我不知道出了什么问题。我想听听你的建议。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-04-27 14:26:57

当您对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

您的onComplete中的代码需要通过在task.getResult().getChildren()上循环来处理它得到一个列表的事实。

代码语言:javascript
复制
mDatabase.child("state").limitToLast(1).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        ImageView imageView = findViewById(R.id.fire);
        if (task.isSuccessful()) {
            DataSnapshot snapshot = task.getResult();
            for (DataSnapshot result: snapshot.getChildren()) { // 
                int firescan = result.getValue(Integer.class);
                if (firescan == 0){
                    imageView.setVisibility(View.VISIBLE);
                }
                else{
                    imageView.setVisibility(View.INVISIBLE);
                }
            }
        }
        else {
            Log.e("firebase", "Error getting data", task.getException());
        }
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72027234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档