Android 我该如何解决;回收器视图无适配器,将数据(订单)从firebase加载到回收器视图时跳过布局错误?
我已经实现了recycler视图,一切正常,但没有显示任何数据 正在显示的错误消息是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
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视图,我不知道为什么数据无法显示,也不知道为什么会弹出错误