从Firebase获取数据但未在recyclerview中显示

时间:2020-10-04 19:29:00

标签: android

我是android开发的新手。我正在尝试创建Firebase数据列表。所以我创建了一个recyclerview并在recyclerview中表示数据。 我已经从firebase获取了数据并分配给适配器类。但是数据没有显示在recyclerview中。

片段类

public class HomeFragment extends Fragment {
DatabaseReference reference;
RecyclerView recyclerView;
ArrayList<Carmodel> list = new ArrayList<>();;
CarAdapter adapter;
public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.recyclerview, container, false);
    recyclerView = (RecyclerView) root.findViewById(R.id.recycler);
    recyclerView.setLayoutManager( new LinearLayoutManager(getContext()));
    reference = FirebaseDatabase.getInstance().getReference().child("AddCar");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                Carmodel p = dataSnapshot1.getValue(Carmodel.class);
                Log.e("Get Data", p.getCarName());
                list.add(p);
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            Toast.makeText(getActivity(), "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
        }
    });
    adapter = new CarAdapter(getContext(), list);
    recyclerView.setAdapter(adapter);
    adapter.notifyDataSetChanged();
    return root;
}
}

Adapert班

public class CarAdapter extends RecyclerView.Adapter<CarAdapter.MyViewHolder> {
Context context;
ArrayList<Carmodel> profiles;
public CarAdapter(Context c , ArrayList<Carmodel> p)
{
    context = c;
    profiles = p;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.fragment_admin_home, parent, false));
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.name.setText(profiles.get(position).getCarName());
    holder.seater.setText(profiles.get(position).getSeater());
    holder.price.setText(profiles.get(position).getPrice());
    holder.status.setText(profiles.get(position).getAvailable());
    Picasso.get().load(profiles.get(position).getImageURL()).into(holder.car_image);
}
@Override
public int getItemCount() {
    return profiles.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
    TextView name,seater,price, status;
    ImageView car_image;
    @SuppressLint("CutPasteId")
    public MyViewHolder(View itemView) {
        super(itemView);
        name = (TextView) itemView.findViewById(R.id.CarName);
        seater = (TextView) itemView.findViewById(R.id.Seater);
        price = (TextView) itemView.findViewById(R.id.Seater);
        car_image = (ImageView) itemView.findViewById(R.id.imageView);
        status = (TextView) itemView.findViewById(R.id.Status);
    }
}

2 个答案:

答案 0 :(得分:0)

您在错误的时间通知适配器以进行数据更改

adapter = new CarAdapter(getContext(), list);
recyclerView.setAdapter(adapter);
    reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
            Carmodel p = dataSnapshot1.getValue(Carmodel.class);
            Log.e("Get Data", p.getCarName());
            list.add(p);
        }
adapter.notifyDataSetChanged();
    }
    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        Toast.makeText(getActivity(), "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
    }
});

请这样修改您的方法

答案 1 :(得分:0)

Carmodel p = dataSnapshot1.getValue(Carmodel.class);

确保它(p)不为空