我是新手,正在学习如何使用 android studio 和 firebase 实时存储来创建应用程序。我试图制作一个可以轻松从 firebase 检索详细信息的应用程序,当尝试从 firebase 检索详细信息时,这些应用程序会自行停止。按此布局:在此处输入图像描述
a=(TextView)findViewById(R.id.account);
b=(TextView)findViewById(R.id.name);
c=(TextView)findViewById(R.id.bank);
edt=(EditText)findViewById(R.id.enteracc);
btn=(Button)findViewById(R.id.search);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
reff= FirebaseDatabase.getInstance().getReference();
reff.child("number").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String enternum=dataSnapshot.child("number").getValue().toString();
String account=dataSnapshot.child("account").getValue().toString();
String name=dataSnapshot.child("name").getValue().toString();
String bank=dataSnapshot.child("bank").getValue().toString();
a.setText(account);
b.setText(name);
c.setText(bank);
edt.setText(enternum);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
它是使用按钮 setOnClickListener 的正确方法吗?
在 Firebase 中,数据将是这样的:
number:
{
"22508800018589":
{
"account": "22508800018589",
"name": "CBS TOP TRADING",
"bank": "rhb"
},
"11004600239812":
{
"account": "11004600239812",
"name": "Kong Kit Lun",
"bank": "rhb"
},
"11407100284908":
{
"account": "11407100284908",
"name": "Tee Wan Yee",
"bank": "rhb"
}
}
您的子节点没有number
属性,因此不会获得任何值:
String enternum=dataSnapshot.child("number").getValue().toString();
事实上,getValue()
will return null
,所以调用toString()
它会抛出一个NullPointerException
.
我的猜测是您正在寻找作为节点键的数字。您可以通过以下方式获得:
String enternum = dataSnapshot.getKey();
正如安德烈评论的那样,您还需要遍历number
. 结合起来变成:
reff= FirebaseDatabase.getInstance().getReference();
reff.child("number").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot: snapshot.getChildren()) {
String enternum=dataSnapshot.getKey();
String account=dataSnapshot.child("account").getValue(String.class);
String name=dataSnapshot.child("name").getValue(String.class);
String bank=dataSnapshot.child("bank").getValue(String.class);
a.setText(account);
b.setText(name);
c.setText(bank);
edt.setText(enternum);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句