Данные не загружаются из базы данных Firebase в RecyclerView - PullRequest
0 голосов
/ 14 января 2020

Here is the Image of Firebase JSON

Я использую базу данных 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, но все же не повезло.

1 Ответ

0 голосов
/ 14 января 2020

Каждый раз, когда вы устанавливаете данные для вашего адаптера, вам нужно вызывать

notifyDataSetChanged()

Для обновления sh данных адаптера. Полезная ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...