FireBase Android getValue (класс) не работает - PullRequest
0 голосов
/ 09 мая 2018

Итак, это мой класс модели привязки:

public class UserBanknoteAmountBindModel {
    public String id;
    public String userId;
    public String banknoteType;
    public String banknoteAmount;

    public UserBanknoteAmountBindModel(){

    }

    public String getBanknoteAmount() {
        return banknoteAmount;
    }

    public String getBanknoteType() {
        return banknoteType;
    }

    public String getUserId() {
        return userId;
    }

    public void setBanknoteAmount(String banknoteAmount) {
        this.banknoteAmount = banknoteAmount;
    }

    public void setBanknoteType(String banknoteType) {
        this.banknoteType = banknoteType;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
}

(idk, если в этом случае имеют значение модификаторы acess). Я пытаюсь проанализировать мои данные:

      for (DataSnapshot banknoteAmount:dataSnapshot.getChildren()){
           UserBanknoteAmountBindModel userBanknoteAmountBindModel=dataSnapshot.getValue(UserBanknoteAmountBindModel.class);

Log.wtf("hgfh", banknoteAmount.getValue().toString());
              }

Я вижу, что я получаю свои данные, потому что могу их зарегистрировать.

{banknoteAmount = 3, banknoteType = 20_долларов, = идентификатор пользователя +112371098270685247195}

В любом случае, мои данные не попадают в мою модель привязки. Я где-то читал, что мне нужны не только средства получения, но и установщики (вот почему я поставил эти установщики. PS: правда ли это для установщиков?). Есть идеи?

РЕДАКТИРОВАТЬ: Структура базы данных https://i.stack.imgur.com/o5Hgp.png PS: проблема заключалась в том, что я использовал параметр из другой функции для getValue (не для переменной foorloop)

1 Ответ

0 голосов
/ 09 мая 2018

Чтобы получить значения banknoteAmount, banknoteType и userId, используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userBanknoteAmountRef = rootRef.child("userBanknoteAmount");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            UserBanknoteAmountBindModel userBanknoteAmountBindModel = ds.getValue(UserBanknoteAmountBindModel.class);
            String banknoteAmount = userBanknoteAmountBindModel.getBanknoteAmount();
            String banknoteType = userBanknoteAmountBindModel.getBanknoteType();
            String userId = userBanknoteAmountBindModel.getUserId();
            Log.d("TAG", banknoteAmount + " / " + banknoteType + " / " + userId);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
userBanknoteAmountRef.addListenerForSingleValueEvent(valueEventListener);

Вывод будет:

3 / 20_dollar / 112371098270685247195

Когда вы используете следующую строку кода:

banknoteAmount.getValue().toString()

На самом деле вы печатаете строковое представление banknoteAmount.getValue(), которое имеет в качестве возвращаемого значения объект Map, который содержит эти три значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...