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