简体   繁体   中英

Adding values from Firebase to RecycleView adapter won't show in app

I'm trying to return the key and value from my Firebase Database and insert it into a RecycleView adapter but the values won't show up in the app.

I can't wrap my head around this whatsoever.

I tried to show the values in a Toast and it worked but why won't the values be inserted into the RecycleView adapter?

This is the code.

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);


    }

}

You can get this using following code

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) {

        }
    });

You have to add notifyDataSetChanged(); after you fill ArrayList from firebase. Because it's take time to load data from firebase. And your adapter initialised before fill ArrayList from firebase.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM