Как я могу прочитать и вернуть данные из базы данных Firebase в реальном времени? - PullRequest
0 голосов
/ 02 октября 2018

Я пытался читать данные из базы данных Firebase и возвращать значения другому методу. Для этого я добавил интерфейс и использовал его в качестве функции обратного вызова и пытался дождаться заполнения данных.Но это все еще дает исключение нулевого указателя.

private interface FirebaseCallback {
    void onCallBack(Card card);
}


// method to read travel Cards
public void readCard(final FirebaseCallback fb) {

    cardNo = (EditText)findViewById(R.id.editTextCardNo);

    ValueEventListener cardListner = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if(dataSnapshot.exists()) {

                travelCard = dataSnapshot.getValue(Card.class);
                fb.onCallBack(travelCard);

            }

            else displayMessage(inValidTravelCard);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.d("ERROR : ", databaseError.getMessage());
        }
    };

    String cn = cardNo.getText().toString();
    Query q = FirebaseDatabase.getInstance().getReference("Card").orderByChild("cardNumber").equalTo(cn).limitToFirst(1);
    q.addListenerForSingleValueEvent(cardListner);

}



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

                  System.out.println("fffffffffffffffffffffffffffffff    " +  " BEFORE>..........................");

            readCard(new FirebaseCallback() {
                @Override
                public void onCallBack(Card card) {
                    Log.d("card = ",card.getAccountId());
                }
            });

            System.out.println("fffffffffffffffffffffffffffffff    " +  " After>..........................");
        }
    });

}

Вот ОШИБКА:

enter image description here

Вот база данных

enter image description here

1 Ответ

0 голосов
/ 02 октября 2018

Если вы проанализируете трассировку стека, вы получите сообщение об ошибке println needs a message, вызванное Log.d.В коде, которым вы поделились, есть два оператора, которые могут вызвать это сообщение:

Log.d("ERROR : ", databaseError.getMessage());

И

Log.d("card = ",card.getAccountId());

Кажется весьма маловероятным, что databaseError.getMessage() ничего не возвращает, поэтому более вероятночто card.getAccountId() ничего не возвращает или null.Простое решение состоит в том, чтобы проверить это:

Log.d("card = ", card.getAccountId() != null ? card.getAccountId() : "No account ID found on card");

Исключения с нулевым указателем встречаются крайне часто, и знание того, как их устранять, - это навык, который будет вам полезен.Я рекомендую изучить: Что такое исключение NullPointerException и как его исправить? .

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