首页 > 解决方案 > 将值从 Firebase 添加到 RecycleView 适配器不会显示在应用程序中

问题描述

我正在尝试从我的 Firebase 数据库返回键和值并将其插入RecycleView适配器,但这些值不会显示在应用程序中。

我无论如何都无法解决这个问题。

我试图显示 a 中的值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);


    }

}

标签: javaandroidfirebasefirebase-realtime-databaseandroid-recyclerview

解决方案


您可以使用以下代码获取此信息

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

        }
    });

您必须在从 firebasenotifyDataSetChanged();填充后添加。ArrayList因为从 firebase 加载数据需要时间。并且您的适配器在ArrayList从 firebase 填充之前初始化。


推荐阅读