首页 > 解决方案 > Firebase getValue() 方法在应用小部件中不起作用

问题描述

这是我在这里的第一个问题:)

这是我的火力基地:

{
  "Users": {
    {
      "G2u5-1yQI-GaKN" : {
        "login" : "Tom",
        "name" : "Tom",
        "password" : "1234"
      },
      "JMtk-T2AZ-LJY8" : {
        "login" : "Ann",
        "name" : "Ann",
        "password" : "abcd"
      }
    }
  }
}

我的火力基地

我想获取 JMtk-T2AZ-LJY8 用户(Ann)的名称键值并将其设置为我的应用程序小部件中的 TextView 的文本。

我的代码是:

final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_widget);

final DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Users").child("JMtk-T2AZ-LJY8");

views.setTextViewText(R.id.textView2, String.valueOf(reference.child("name").getValue()));

我不能在这里使用 getValue() 方法,我不知道为什么?

当我在 MainActivity 的 onCreate 方法中使用类似的代码时,它工作正常(它返回“Ann :),但在应用程序小部件中却没有。解决方案是什么?

标签: androidfirebasefirebase-realtime-databaseandroid-remoteview

解决方案


正如 Doug 所说,您实际上还没有加载任何数据。您现在拥有的代码仅定义了对数据库中某个位置的引用。要从该位置获取实际数据,您需要将侦听器附加到引用。

就像是:

final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_widget);

final DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Users").child("JMtk-T2AZ-LJY8");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      views.setTextViewText(
        R.id.textView2, 
        dataSnapshot.child("name").getValue(String.class)
      );
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

如果您只需要用户名,您还可以将侦听器附加到该属性并节省一些带宽:

final DatabaseReference reference = FirebaseDatabase.getInstance().getReference()
                                       .child("Users/JMtk-T2AZ-LJY8/name");

reference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      views.setTextViewText(
        R.id.textView2, 
        dataSnapshot.getValue(String.class)
      );
    }

推荐阅读