Android 我该如何解决;回收器视图无适配器,将数据(订单)从firebase加载到回收器视图时跳过布局错误?

Android 我该如何解决;回收器视图无适配器,将数据(订单)从firebase加载到回收器视图时跳过布局错误?,android,android-recyclerview,Android,Android Recyclerview,我已经实现了recycler视图,一切正常,但没有显示任何数据 正在显示的错误消息是 E/RecyclerView: No adapter attached; skipping layout E/RecyclerView:未连接适配器;跳过布局 对于以下代码行 private ArrayList<ModelOrderUser> orderList; private AdapterOrderUser adapterOrderUser;--------> adapter,arra

我已经实现了recycler视图,一切正常,但没有显示任何数据

正在显示的错误消息是

E/RecyclerView: No adapter attached; skipping layout
E/RecyclerView:未连接适配器;跳过布局

对于以下代码行

private ArrayList<ModelOrderUser> orderList;
private AdapterOrderUser adapterOrderUser;--------> adapter,arraylist,recyclerView initialization
private RecyclerView orders_user_Rv;
使用数据设置适配器的方法调用(在onCreate方法下)

加载顺序();如下图所示

private void loadOrders() {
    //init order list
    orderList = new ArrayList<>();
    //get orders
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            orderList.clear();
            for (DataSnapshot ds: snapshot.getChildren()){
                String uid = ""+ds.getRef().getKey();
                DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(uid).child("Orders");
                reference.orderByChild("orderBy").equalTo(firebaseAuth.getUid())
                        .addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {
                                if (snapshot.exists()){
                                    for (DataSnapshot ds: snapshot.getChildren()){
                                        ModelOrderUser modelOrderUser = ds.getValue(ModelOrderUser.class);

                                        //add to list
                                        orderList.add(modelOrderUser);
                                    }
                                    //setup adapter
                                    adapterOrderUser = new AdapterOrderUser(HomePage.this, orderList);
                                    //set to recyclerview
                                    orders_user_Rv.setAdapter(adapterOrderUser);
                                }
                            }

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

                            }
                        });
            }
        }

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

        }
    });
<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/order_userRv"
            android:layout_below="@id/ordersTv"
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            tools:listitem="@layout/row_order_user"/>
public class AdapterOrderUser extends  RecyclerView.Adapter<AdapterOrderUser.HolderOrderUser> {

private Context oContext;
private ArrayList<ModelOrderUser> orderUserList;

public AdapterOrderUser(Context oContext, ArrayList<ModelOrderUser> orderUserList) {
    this.oContext = oContext;
    this.orderUserList = orderUserList;
}

@NonNull
@Override
public HolderOrderUser onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    // inflate layout
    View view = LayoutInflater.from(oContext).inflate(R.layout.row_order_user, parent, false);
    return new HolderOrderUser(view);
}

@Override
public void onBindViewHolder(@NonNull HolderOrderUser holder, int position) {
    //get data
    ModelOrderUser modelOrderUser = orderUserList.get(position);
    String orderId = modelOrderUser.getOrderId();
    String orderBy = modelOrderUser.getOrderBy();
    String orderCost = modelOrderUser.getOrderCost();
    String orderStatus = modelOrderUser.getOrderStatus();
    String orderTime = modelOrderUser.getOrderTime();

    //set data

    holder.amountTv.setText("Amount: Ksh" +orderCost);
    holder.statusTv.setText(orderStatus);
    holder.orderIdTv.setText("OrderID:"+ orderId);
    //change order status color
    if ("In Progress".equals(orderStatus)){
        holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.colorPrimary));
    }else if ("Completed".equals(orderStatus)){
        holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.green));
    }else if ("Cancelled".equals(orderStatus)){
        holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.red));
    }
    //convert timeStamp to proper format
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(Long.parseLong(orderTime));
    String formattedDate = DateFormat.format("dd/mm/yyyy", calendar).toString();

    holder.dateTv.setText(formattedDate);

}

@Override
public int getItemCount() {
    return orderUserList.size();
}

//view holder class
class HolderOrderUser extends RecyclerView.ViewHolder{

    //views of layout
    private TextView orderIdTv, dateTv, amountTv, statusTv;
    public HolderOrderUser(@NonNull View itemView) {
        super(itemView);

        orderIdTv = itemView.findViewById(R.id.orderIdTv);
        dateTv = itemView.findViewById(R.id.orderDateTv);
        amountTv = itemView.findViewById(R.id.orderamountTv);
        statusTv = itemView.findViewById(R.id.orderStatusTv);
    }
}
private void loadOrders(){
//初始订单列表
orderList=新的ArrayList();
//接到命令
DatabaseReference ref=FirebaseDatabase.getInstance().getReference(“用户”);
ref.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
clear();
对于(DataSnapshot ds:snapshot.getChildren()){
字符串uid=“”+ds.getRef().getKey();
DatabaseReference=FirebaseDatabase.getInstance().getReference(“用户”).child(uid).child(“订单”);
reference.orderByChild(“orderBy”).equalTo(firebaseAuth.getUid())
.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
if(snapshot.exists()){
对于(DataSnapshot ds:snapshot.getChildren()){
ModelOrderUser ModelOrderUser=ds.getValue(ModelOrderUser.class);
//添加到列表中
添加(modelOrderUser);
}
//安装适配器
adapterOrderUser=新adapterOrderUser(HomePage.this,orderList);
//设置为recyclerview
订购用户设置适配器(适配器或接收器);
}
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
recycler视图的XML代码如下所示

private void loadOrders() {
    //init order list
    orderList = new ArrayList<>();
    //get orders
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            orderList.clear();
            for (DataSnapshot ds: snapshot.getChildren()){
                String uid = ""+ds.getRef().getKey();
                DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(uid).child("Orders");
                reference.orderByChild("orderBy").equalTo(firebaseAuth.getUid())
                        .addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {
                                if (snapshot.exists()){
                                    for (DataSnapshot ds: snapshot.getChildren()){
                                        ModelOrderUser modelOrderUser = ds.getValue(ModelOrderUser.class);

                                        //add to list
                                        orderList.add(modelOrderUser);
                                    }
                                    //setup adapter
                                    adapterOrderUser = new AdapterOrderUser(HomePage.this, orderList);
                                    //set to recyclerview
                                    orders_user_Rv.setAdapter(adapterOrderUser);
                                }
                            }

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

                            }
                        });
            }
        }

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

        }
    });
<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/order_userRv"
            android:layout_below="@id/ordersTv"
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            tools:listitem="@layout/row_order_user"/>
public class AdapterOrderUser extends  RecyclerView.Adapter<AdapterOrderUser.HolderOrderUser> {

private Context oContext;
private ArrayList<ModelOrderUser> orderUserList;

public AdapterOrderUser(Context oContext, ArrayList<ModelOrderUser> orderUserList) {
    this.oContext = oContext;
    this.orderUserList = orderUserList;
}

@NonNull
@Override
public HolderOrderUser onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    // inflate layout
    View view = LayoutInflater.from(oContext).inflate(R.layout.row_order_user, parent, false);
    return new HolderOrderUser(view);
}

@Override
public void onBindViewHolder(@NonNull HolderOrderUser holder, int position) {
    //get data
    ModelOrderUser modelOrderUser = orderUserList.get(position);
    String orderId = modelOrderUser.getOrderId();
    String orderBy = modelOrderUser.getOrderBy();
    String orderCost = modelOrderUser.getOrderCost();
    String orderStatus = modelOrderUser.getOrderStatus();
    String orderTime = modelOrderUser.getOrderTime();

    //set data

    holder.amountTv.setText("Amount: Ksh" +orderCost);
    holder.statusTv.setText(orderStatus);
    holder.orderIdTv.setText("OrderID:"+ orderId);
    //change order status color
    if ("In Progress".equals(orderStatus)){
        holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.colorPrimary));
    }else if ("Completed".equals(orderStatus)){
        holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.green));
    }else if ("Cancelled".equals(orderStatus)){
        holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.red));
    }
    //convert timeStamp to proper format
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(Long.parseLong(orderTime));
    String formattedDate = DateFormat.format("dd/mm/yyyy", calendar).toString();

    holder.dateTv.setText(formattedDate);

}

@Override
public int getItemCount() {
    return orderUserList.size();
}

//view holder class
class HolderOrderUser extends RecyclerView.ViewHolder{

    //views of layout
    private TextView orderIdTv, dateTv, amountTv, statusTv;
    public HolderOrderUser(@NonNull View itemView) {
        super(itemView);

        orderIdTv = itemView.findViewById(R.id.orderIdTv);
        dateTv = itemView.findViewById(R.id.orderDateTv);
        amountTv = itemView.findViewById(R.id.orderamountTv);
        statusTv = itemView.findViewById(R.id.orderStatusTv);
    }
}

适配器线路如下所示

private void loadOrders() {
    //init order list
    orderList = new ArrayList<>();
    //get orders
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            orderList.clear();
            for (DataSnapshot ds: snapshot.getChildren()){
                String uid = ""+ds.getRef().getKey();
                DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(uid).child("Orders");
                reference.orderByChild("orderBy").equalTo(firebaseAuth.getUid())
                        .addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {
                                if (snapshot.exists()){
                                    for (DataSnapshot ds: snapshot.getChildren()){
                                        ModelOrderUser modelOrderUser = ds.getValue(ModelOrderUser.class);

                                        //add to list
                                        orderList.add(modelOrderUser);
                                    }
                                    //setup adapter
                                    adapterOrderUser = new AdapterOrderUser(HomePage.this, orderList);
                                    //set to recyclerview
                                    orders_user_Rv.setAdapter(adapterOrderUser);
                                }
                            }

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

                            }
                        });
            }
        }

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

        }
    });
<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/order_userRv"
            android:layout_below="@id/ordersTv"
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            tools:listitem="@layout/row_order_user"/>
public class AdapterOrderUser extends  RecyclerView.Adapter<AdapterOrderUser.HolderOrderUser> {

private Context oContext;
private ArrayList<ModelOrderUser> orderUserList;

public AdapterOrderUser(Context oContext, ArrayList<ModelOrderUser> orderUserList) {
    this.oContext = oContext;
    this.orderUserList = orderUserList;
}

@NonNull
@Override
public HolderOrderUser onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    // inflate layout
    View view = LayoutInflater.from(oContext).inflate(R.layout.row_order_user, parent, false);
    return new HolderOrderUser(view);
}

@Override
public void onBindViewHolder(@NonNull HolderOrderUser holder, int position) {
    //get data
    ModelOrderUser modelOrderUser = orderUserList.get(position);
    String orderId = modelOrderUser.getOrderId();
    String orderBy = modelOrderUser.getOrderBy();
    String orderCost = modelOrderUser.getOrderCost();
    String orderStatus = modelOrderUser.getOrderStatus();
    String orderTime = modelOrderUser.getOrderTime();

    //set data

    holder.amountTv.setText("Amount: Ksh" +orderCost);
    holder.statusTv.setText(orderStatus);
    holder.orderIdTv.setText("OrderID:"+ orderId);
    //change order status color
    if ("In Progress".equals(orderStatus)){
        holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.colorPrimary));
    }else if ("Completed".equals(orderStatus)){
        holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.green));
    }else if ("Cancelled".equals(orderStatus)){
        holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.red));
    }
    //convert timeStamp to proper format
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(Long.parseLong(orderTime));
    String formattedDate = DateFormat.format("dd/mm/yyyy", calendar).toString();

    holder.dateTv.setText(formattedDate);

}

@Override
public int getItemCount() {
    return orderUserList.size();
}

//view holder class
class HolderOrderUser extends RecyclerView.ViewHolder{

    //views of layout
    private TextView orderIdTv, dateTv, amountTv, statusTv;
    public HolderOrderUser(@NonNull View itemView) {
        super(itemView);

        orderIdTv = itemView.findViewById(R.id.orderIdTv);
        dateTv = itemView.findViewById(R.id.orderDateTv);
        amountTv = itemView.findViewById(R.id.orderamountTv);
        statusTv = itemView.findViewById(R.id.orderStatusTv);
    }
}
公共类适配器OrderUser扩展了RecyclerView.Adapter{
私人语境;
私有ArrayList orderUserList;
公共适配器OrderRuser(上下文oContext、ArrayList orderUserList){
this.oContext=oContext;
this.orderUserList=orderUserList;
}
@非空
@凌驾
public HolderOrderUser onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
//充气布局
视图=LayoutFlater.from(oContext).充气(R.layout.row\u order\u user,parent,false);
返回新的HolderOrderUser(视图);
}
@凌驾
BindViewHolder上的公共无效(@NonNull HolderOrderUser holder,int位置){
//获取数据
ModelOrderUser ModelOrderUser=orderUserList.get(位置);
字符串orderId=modelOrderUser.getOrderId();
字符串orderBy=modelOrderUser.getOrderBy();
字符串orderCost=modelOrderUser.getOrderCost();
字符串orderStatus=modelOrderUser.getOrderStatus();
字符串orderTime=modelOrderUser.getOrderTime();
//设置数据
holder.amountTv.setText(“金额:Ksh”+订单成本);
holder.statusTv.setText(订单状态);
holder.orderIdTv.setText(“OrderID:+OrderID”);
//更改订单状态颜色
如果(“进行中”。等于(订单状态)){
holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.colorPrimary));
}否则,如果(“已完成”。等于(订单状态)){
holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.green));
}否则,如果(“已取消”。等于(订单状态)){
holder.statusTv.setTextColor(oContext.getResources().getColor(R.color.red));
}
//将时间戳转换为正确的格式
日历=Calendar.getInstance();
calendar.setTimeInMillis(Long.parseLong(orderTime));
字符串formattedDate=DateFormat.format(“dd/mm/yyyy”,calendar).toString();
holder.dateTv.setText(格式化日期);
}
@凌驾
public int getItemCount(){
返回orderUserList.size();
}
//视图持有者类
类HolderOrderUser扩展了RecyclerView.ViewHolder{
//布局视图
私有文本视图orderIdTv、dateTv、amountTv、statusTv;
public-HolderOrderUser(@NonNull-View-itemView){
超级(项目视图);
orderIdTv=itemView.findviewbyd(R.id.orderIdTv);
dateTv=itemView.findViewById(R.id.orderDateTv);
amountTv=itemView.findViewById(R.id.orderamountTv);
statusTv=itemView.findViewById(R.id.orderStatusTv);
}
}
正如您所看到的,我已将适配器连接到recycler视图,我不知道为什么数据无法显示,也不知道为什么会弹出错误