Метод getbalue () в Firebase не работает в виджете приложения - PullRequest
0 голосов
/ 29 марта 2020

Это мой первый вопрос здесь:)

Это мой Firebase:

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

Мой Firebase

Я хочу получить значение ключа имени пользователя 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 () метод здесь, я не знаю почему?

Когда я использую подобный код в методе MainCctivity onCreate, он работает нормально (он возвращает «Ann :), но не в виджете приложения. Какое решение?

1 Ответ

1 голос
/ 29 марта 2020

Как сказал Дуг, вы еще не загружаете никаких данных. Код, который у вас есть, просто определяет ссылку на местоположение в вашей базе данных. Чтобы получить фактические данные из этого местоположения, вам нужно присоединить слушателя к ссылке.

Что-то вроде:

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)
      );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...