【问题标题】:How do I read and return data from firebase realtime database?如何从 firebase 实时数据库读取和返回数据?
【发布时间】:2018-10-02 10:55:02
【问题描述】:

我尝试从 firebase db 读取数据并将值返回给另一个方法。为此,我添加了接口并将其用作回调函数并尝试等待数据填充。但它仍然给出空指针异常。

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>..........................");
        }
    });

}

这是错误:

这是数据库

【问题讨论】:

    标签: android firebase-realtime-database


    【解决方案1】:

    如果您解析堆栈跟踪,则会收到错误消息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");
    

    空指针异常非常常见,知道如何解决它们是一项对您很有帮助的技能。推荐学习:What is a NullPointerException, and how do I fix it?.

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 2022-10-07
      相关资源
      最近更新 更多