Невозможно получить данные из firebase путем получения "номера" - PullRequest
0 голосов
/ 07 мая 2019

Я новичок и изучаю, как создавать приложения с помощью 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"
  }
}

1 Ответ

0 голосов
/ 07 мая 2019

Ваши дочерние узлы не имеют свойства number, поэтому они не получат никакого значения:

String enternum=dataSnapshot.child("number").getValue().toString();

На самом деле, getValue() вернет 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);
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...