Добавление значений из Firebase в адаптер RecycleView не будет отображаться в приложении - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь вернуть ключ и значение из моей базы данных Firebase и вставить его в адаптер RecycleView, но значения не отображаются в приложении.

Я не могу обернуть голову вокруг этого вообще.

Я пытался показать значения в Toast, и это сработало, но почему эти значения не будут вставлены в адаптер RecycleView?

Это код.

public class test extends AppCompatActivity {
    TextView textView;
    Button button;
    String phone;

    String n;
    String a;

    FirebaseAuth mAuth;

    MyRecyclerViewAdapter adapter;

    ArrayList<String> info;

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


        Bundle b = new Bundle();
        b = getIntent().getExtras();
        phone = b.getString("number");

        textView = findViewById(R.id.textV);
        button = findViewById(R.id.signoutButton);

        mAuth = FirebaseAuth.getInstance();

        textView.setText(textView.getText().toString() + " as " + phone);


        info = new ArrayList<>();


        FirebaseDatabase myRef = FirebaseDatabase.getInstance();
        DatabaseReference sRef = myRef.getReference("users");

        sRef.addValueEventListener(new ValueEventListener() {


            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnap : dataSnapshot.getChildren()) {

                    if (childSnap.getKey().equals(phone)) {

                        for (DataSnapshot c : childSnap.getChildren()) {

                            n = c.getKey();
                            a = c.getValue().toString();

                            info.add(n);
                            info.add(a);


                        }


                    }


                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


        RecyclerView recyclerView = findViewById(R.id.rvInfo);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new MyRecyclerViewAdapter(this, info);
        adapter.setClickListener(new MyRecyclerViewAdapter.ItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(test.this, "You clicked " + adapter.getItem(position) + " on row number " + position, Toast.LENGTH_SHORT).show();
            }
        });
        recyclerView.setAdapter(adapter);


    }

}

1 Ответ

0 голосов
/ 07 декабря 2018

Вы можете получить это, используя следующий код

sRef.addValueEventListener(new ValueEventListener() {


        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot childSnap : dataSnapshot.getChildren()) {

                if (childSnap.getKey().equals(phone)) {

                    for (DataSnapshot c : childSnap.getChildren()) {

                        n = c.getKey();
                        a = c.getValue().toString();

                        info.add(n);
                        info.add(a);
                    }
                }
            }
            notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

Вы должны добавить notifyDataSetChanged(); после того, как заполните ArrayList из базы данных.Потому что для загрузки данных из firebase требуется время.И ваш адаптер инициализируется перед заполнением ArrayList из firebase.

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