java - 将值从 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);
}
}
解决方案
您可以使用以下代码获取此信息
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 填充之前初始化。
推荐阅读
- nginx - GKE 中的 Kubernetes - Nginx Ingress 部署 - 分配给 Ingress 资源的公共 IP
- c# - 如何将 BigQuery 时间戳转换为 DateTime?
- php - 尝试更新时的laravel验证错误
- json - 使用 Newtonsoft JSON 和 VB.NET 检查嵌套 JSON 元素中是否存在键
- ios - 具有动态高度的 UITableViewCell 中的 UITableView
- mongodb - Kubernetes MongoDB 自动缩放
- excel - 如何判断是一个月的第一天还是第二天?
- javascript - 如何在另一种方法中检索一些变量
- java - 在 Java VisualVM 中安装 Visual GC 后出现 java.lang.NoClassDefFoundError
- android - 更改 Android Emulator 麦克风的默认设置