Android 如何从firebase实时数据库读取和返回数据?
我尝试从firebase db读取数据并将值返回给另一个方法。为此,我添加了接口并将其用作回调函数,并尝试等待数据填充。但它仍然给出空指针异常Android 如何从firebase实时数据库读取和返回数据?,android,firebase-realtime-database,Android,Firebase Realtime Database,我尝试从firebase db读取数据并将值返回给另一个方法。为此,我添加了接口并将其用作回调函数,并尝试等待数据填充。但它仍然给出空指针异常 private interface FirebaseCallback { void onCallBack(Card card); } // method to read travel Cards public void readCard(final FirebaseCallback fb) { cardNo = (EditText)
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>..........................");
}
});
}
以下是错误:
这是数据库
如果您解析堆栈跟踪,您会得到错误消息,您得到的消息是
println需要一条消息,该消息由Log.d
触发。在您共享的代码中,有两条语句可以触发该消息:
Log.d("ERROR : ", databaseError.getMessage());
及
databaseError.getMessage()
似乎不太可能什么也不返回,因此card.getAccountId()
更可能什么也不返回或null
。一个简单的解决方案是检查:
Log.d("card = ", card.getAccountId() != null ? card.getAccountId() : "No account ID found on card");
空指针异常非常常见,知道如何对其进行故障排除是一项非常有用的技能。我建议学习:
Log.d("card = ", card.getAccountId() != null ? card.getAccountId() : "No account ID found on card");