0

I'm using the a Firestore Paging Adapter on my Android app but when i try to set the adapter for my recyclerview, it's says that it need an Adapter and not a Firestore Paging Adapter. Do you have any solutions ?

package fr.arikkusan.xxx.UI;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.paging.PagedList;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.firebase.ui.firestore.paging.FirestorePagingAdapter;
import com.firebase.ui.firestore.paging.FirestorePagingOptions;
import com.firebase.ui.firestore.paging.LoadingState;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;

import fr.arikkusan.xxx.Holder.SheetViewHolder;
import fr.arikkusan.xxx.Models.SheetsModel;
import fr.arikkusan.xxx.R;

public class ListActivity2 extends AppCompatActivity {

    private FirestorePagingAdapter<SheetsModel, SheetViewHolder> adapter;
    private SheetsModel model;

    private FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
    private CollectionReference sheets = firebaseFirestore.collection("Sheets");


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        Query query = sheets.orderBy("Full_Name");

        PagedList.Config config = new PagedList.Config.Builder()
                .setEnablePlaceholders(false)
                .setPrefetchDistance(10)
                .setPageSize(15)
                .build();

        FirestorePagingOptions<SheetsModel> options = new FirestorePagingOptions.Builder<SheetsModel>()
                .setLifecycleOwner(this)
                .setQuery(query, config, snapshot -> {
                    model = snapshot.toObject(SheetsModel.class);
                    return model;
                })
                .build();

        adapter = new FirestorePagingAdapter<SheetsModel, SheetViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull SheetViewHolder holder, int position, @NonNull SheetsModel model) {
                holder.bindTO(model);
            }

            @NonNull
            @Override
            public SheetViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_sheet_single, parent, false);
                return new SheetViewHolder(view);
            }

            @Override
            protected void onError(@NonNull Exception e) {
                super.onError(e);
                //logic here
            }

            @Override
            protected void onLoadingStateChanged(@NonNull LoadingState state) {
                switch (state) {
                    case LOADING_INITIAL:
                        break;

                    case LOADING_MORE:
                        break;

                    case LOADED:
                        //notifyDataSetChanged();
                        break;

                    case ERROR:
                        //Toast.makeText(requireActivity(), "Error", Toast.LENGTH_SHORT).show();
                        //logic here
                        break;

                    case FINISHED:
                        //logic here
                        break;
                }
            }
        };

        RecyclerView recyclerView = findViewById(R.id.item_Sheetslist);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(adapter);

    }
}

My Holder :

package fr.arikkusan.xxx.Holder;

import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import fr.arikkusan.xxx.Models.SheetsModel;
import fr.arikkusan.xxx.R;

public class SheetViewHolder extends RecyclerView.ViewHolder {

    private TextView sheet_name, Type;
    private ImageView msc_image;

    public SheetViewHolder(@NonNull View itemView) {
        super(itemView);

        sheet_name = itemView.findViewById(R.id.SheetName);
        msc_image = itemView.findViewById(R.id.MU_Logo);
        Type = itemView.findViewById(R.id.Type);

    }

    public void bindTO(SheetsModel model) {
         sheet_name.setText(model.getFull_Name());
         Type.setText(model.getType());
         msc_image.setVisibility(View.GONE);
    }
}

I used these link to make my code :

Do you have any solution ?

Error:

    Process: fr.arikkusan.jerichosheets, PID: 27628
    java.lang.RuntimeException: Failed to call observer method
        at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:226)
        at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:194)
        at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:185)
        at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:37)
        at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
        at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265)
        at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307)
        at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)
        at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)
        at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:68)
        at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:144)
        at androidx.lifecycle.ReportFragment.onStart(ReportFragment.java:109)
        at android.app.Fragment.performStart(Fragment.java:2548)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1334)
        at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1576)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1637)
        at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3050)
        at android.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:3007)
        at android.app.FragmentController.dispatchStart(FragmentController.java:194)
        at android.app.Activity.performStart(Activity.java:7356)
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3138)
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7050)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
     Caused by: java.lang.ClassCastException: androidx.paging.InitialDataSource cannot be cast to com.firebase.ui.firestore.paging.FirestoreDataSource
        at com.firebase.ui.firestore.paging.FirestorePagingAdapter$5.apply(FirestorePagingAdapter.java:98)
        at com.firebase.ui.firestore.paging.FirestorePagingAdapter$5.apply(FirestorePagingAdapter.java:95)
        at androidx.lifecycle.Transformations$2.onChanged(Transformations.java:143)
        at androidx.lifecycle.MediatorLiveData$Source.onChanged(MediatorLiveData.java:152)
        at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
        at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:146)
        at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:468)
        at androidx.lifecycle.LiveData.observeForever(LiveData.java:234)
        at androidx.lifecycle.MediatorLiveData$Source.plug(MediatorLiveData.java:141)
        at androidx.lifecycle.MediatorLiveData.onActive(MediatorLiveData.java:118)
        at androidx.lifecycle.LiveData.changeActiveCounter(LiveData.java:390)
        at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:466)
        at androidx.lifecycle.LiveData.observeForever(LiveData.java:234)
        at com.firebase.ui.firestore.paging.FirestorePagingAdapter.startListening(FirestorePagingAdapter.java:181)
E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
        at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:216)
            ... 31 more

Arikkisan
  • 11
  • 3

0 Answers0