android - 如何使用它的 child 在 recyclerview 中显示来自 firebase 的特定数据?

标签 android firebase firebase-realtime-database

例如,我想显示所有 fs_ID 等于 FS02 的订单。我在下面提供了我的 firebase 的屏幕截图:

My firebase

这是我当前的代码:

public class NewOrders extends AppCompatActivity {

public RecyclerView recyclerView;
public RecyclerView.LayoutManager layoutManager;

FirebaseDatabase database;
DatabaseReference requests;

FirebaseRecyclerAdapter<Request, OrderViewHolder> adapter;

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

    //Firebase
    database = FirebaseDatabase.getInstance();
    requests = database.getReference("Order_Header");

    recyclerView = findViewById(R.id.listOrders);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    adapter = new FirebaseRecyclerAdapter<Request, OrderViewHolder>(
            Request.class,
            R.layout.order_layout,
            OrderViewHolder.class,
            requests.orderByChild("fs_ID")
                    .equalTo("FS02")
    ) {
        @Override
        protected void populateViewHolder(OrderViewHolder viewHolder, Request model, int position) {
            viewHolder.txtOrderID.setText(adapter.getRef(position).getKey());
            viewHolder.txtOrderStatus.setText(convertCodeToStatus(model.getStatus()));
            viewHolder.txtOrderUsername.setText(model.getUsername());
            viewHolder.txtOrderFname.setText(model.getFirstName());
            viewHolder.txtOrderLname.setText(model.getLastName());
            viewHolder.txtOrderEmail.setText(model.getEmail());
            viewHolder.txtOrderAddress.setText(model.getAddress());
        }
    };
    recyclerView.setAdapter(adapter);
}

private String convertCodeToStatus(String status){
    //pasok db how

    if (status.equals("OS1")) {
        return "Placed";
    }
    else if (status.equals("OS2")) {
        return "In progress";
    }
    else {
        return "OS3";
    }
}

应该显示的屏幕是空的,可能是什么问题?谢谢

最佳答案

您似乎没有在任何地方调用 startListening,这是 FirebaseUI 开始观察数据库所必需的。现在您告诉适配器要观察什么数据,以及如何处理这些数据,但您从未告诉它开始这样做。

您通常希望在 Activity 的 onStart 中开始收听,然后在 onStop() 中停止收听。

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

另见 FirebaseUI documentation on the adapter lifecycle .

关于android - 如何使用它的 child 在 recyclerview 中显示来自 firebase 的特定数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52679141/

相关文章:

java - 安卓有bug吗? : String. substring(5).replace (“” , “” )//空字符串

Angular2(最终版本)和 Firebase 身份验证不是持久的

firebase - 如何使用 firebase-bolt 定义包含?

javascript - 每次我访问控制台时,firebase 数据库都会重置

java - 渲染期间引发异常 : Binary XML file line #-1 error inflating class

android - 带有Android Studio问题的OpenCV

Firebase 以管理员身份进行身份验证

facebook - Firebase SSO 身份验证在应用程序浏览器中的 Facebook 中不起作用

java - 在 ListView 中显示来自数据库 firebase 的 url 图像

Android - 滚动或平移谷歌地图等网站时刷新 WebView