Я использую базу данных Firebase + FirebaseUI для загрузки определенных данных из Firebase в Android, но эти данные не отображаются в представлении утилизатора.
Однако, регистрируя getCount (), я вижу, что возвращается «2», что означает, что данные присутствуют, но не видны в recyclerView.
Вот мой класс Model:
public SlideshowModel(){
}
public SlideshowModel(String title, String desc, String image, String date) {
this.title = title;
this.desc = desc;
this.image = image;
this.date = date;
}
public String getTitle() {
return title;
}
public String getDesc() {
return desc;
}
public String getImage() {
return image;
}
public String getDate() {
return date;
}
}
Вот мой класс Adapter:
public class SlideShowAdapter extends FirebaseRecyclerAdapter<SlideshowModel, SlideShowAdapter.ViewHolder> {
public SlideShowAdapter(@NonNull FirebaseRecyclerOptions<SlideshowModel> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull ViewHolder holder, final int position, @NonNull SlideshowModel model) {
Picasso.get().load(R.drawable.notification).fit().centerCrop().placeholder(R.drawable.placeholders).into(holder.image);
holder.title.setText(model.getTitle());
holder.description.setText(model.getDesc());
holder.date.setText(model.getDate());
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseDatabase.getInstance().getReference("notifications").child(getRef(position).getKey()).removeValue();
}
});
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_layout_notifications,
parent, false);
return new ViewHolder(view);
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView image, notif_icon, share_image, download_image, delete;
TextView title, description, date;
public ViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.notif);
title = itemView.findViewById(R.id.title);
description = itemView.findViewById(R.id.description);
date = itemView.findViewById(R.id.date);
delete = itemView.findViewById(R.id.delete_notif);
Вот мой Activity:
List<SlideshowModel> slideshowModelList;
SlideShowAdapter adapter;
ProgressDialog pd;
RecyclerView recycler_view;
AdView adView;
DatabaseReference dbProducts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_notif);
recycler_view = findViewById(R.id.recycler_view);
pd = new ProgressDialog(this);
recycler_view.setHasFixedSize(true);
setTitle("Show Notifications");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
slideshowModelList = new ArrayList<>();
dbProducts = FirebaseDatabase.getInstance().getReference("notifications");
// adView = findViewById(R.id.adView);
// MobileAds.initialize(this,"ca-app-pub-3940256099942544~3347511713");
// AdRequest adRequest = new AdRequest.Builder().build();
// adView.loadAd(adRequest);
if (isNetworkConnected()) {
pd.setMessage("Loading");
pd.setCanceledOnTouchOutside(false);
pd.show();
final DatabaseReference dbProducts = FirebaseDatabase.getInstance().getReference("notifications");
Log.e("path1", dbProducts.toString());
dbProducts.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
//
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
// Toast.makeText(ShowNotifActivity.this, "Child Changed", Toast.LENGTH_SHORT).show();
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
dbProducts.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists() || !slideshowModelList.isEmpty()) {
for (DataSnapshot productSnapshot : dataSnapshot.getChildren()) {
SlideshowModel p = productSnapshot.getValue(SlideshowModel.class);
slideshowModelList.add(p);
}
FirebaseRecyclerOptions<SlideshowModel> options =
new FirebaseRecyclerOptions.Builder<SlideshowModel>()
.setQuery(FirebaseDatabase.getInstance().getReference().child("notifications"), SlideshowModel.class)
.build();
adapter = new SlideShowAdapter(options);
recycler_view.setAdapter(adapter);
// adapter = new SlideShowAdapter(SlideshowModel)
String current_counts = String.valueOf(dataSnapshot.getChildrenCount());
Log.e("Curr_Count : ", current_counts);
Collections.reverse(slideshowModelList);
recycler_view.setAdapter(adapter);
// lovelyProgressDialog.dismiss();
pd.dismiss();
}
else {
Toast.makeText(ShowNotifActivity.this, "No Notifications Available", Toast.LENGTH_SHORT).show();
pd.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getApplicationContext(), "Some Error Occured", Toast.LENGTH_SHORT).show();
pd.dismiss();
}
});
} else {
pd.dismiss();
new AlertDialog.Builder(getApplicationContext())
.setTitle("No Internet Available")
.setMessage("Please connect to Internet to get the Notifications")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
recycler_view.setLayoutManager(linearLayoutManager); // set LayoutManager to RecyclerView
}
Update
Я инициализировал конструкторы в AdapterClass, но все же не повезло.