Запрос Firestore не извлекает все элементы в Firestore RecyclerView - PullRequest
0 голосов
/ 26 мая 2020

В настоящее время я извлекаю только максимальный размер элементов -1 из Cloud Firestore, что означает, что если есть 3 элемента, он будет извлекать только 2. Могу ли я узнать, что я делаю неправильно для извлечения элементов из collection (). Document (). коллекция()?

Это мой фрагмент главы, который содержит RecyclerView в xml

public class ChapterFragment extends Fragment {
    FirebaseFirestore db;
    private RecyclerView recyclerView;
    private View view;
    private Query mQuery;
    private FirestoreRecyclerAdapter adapter;
    private String documentId;

    public ChapterFragment() {

    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        db = FirebaseFirestore.getInstance();
        view = inflater.inflate(R.layout.fragment_chapter, container, false);
        recyclerView = view.findViewById(R.id.chapter);
        //Query
            mQuery = db.collection("Book").document("1").collection("1").orderBy("Volume", Query.Direction.DESCENDING);
        //Options
            FirestoreRecyclerOptions<ChapterDetails> options = new FirestoreRecyclerOptions.Builder<ChapterDetails>()
                    .setQuery(mQuery,ChapterDetails.class)
                    .setLifecycleOwner(this)
                    .build();

        //ViewHolder
        adapter = new FirestoreRecyclerAdapter<ChapterDetails, ChapterDetailsViewHolder>(options) {
            @NonNull
            @Override
            public ChapterDetailsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view2 = LayoutInflater.from(parent.getContext()).inflate(R.layout.chapter_list, parent , false);
                return new ChapterDetailsViewHolder(view2);
            }

            @Override
            protected void onBindViewHolder(@NonNull ChapterDetailsViewHolder holder, int position, @NonNull ChapterDetails model) {
                holder.volume.setText("volume " + model.getVolume());
                holder.PDF.setText(model.getPDF());
            }
        };

        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerView.setAdapter(adapter);
        return view;
    }

    private class ChapterDetailsViewHolder extends RecyclerView.ViewHolder{

        private TextView volume;
        private TextView PDF;

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

            volume = itemView.findViewById(R.id.volume_number);
            PDF = itemView.findViewById(R.id.pdf_text);
        }
    }
}

Это изображение моего хранилища огня:

This is the picture of my firestore

Это моя ChapterDetails

public class ChapterDetails {
    private String Volume,PDF;
    public ChapterDetails(){
        //empty
    }
    public ChapterDetails(String volume, String pdf) {
        Volume = volume;
        PDF = pdf;
    }

    public String getVolume() {
        return Volume;
    }

    public void setVolume(String volume) {
        Volume = volume;
    }

    public String getPDF() {
        return PDF;
    }

    public void setPDF(String PDF) {
        this.PDF = PDF;
    }


}

Вот как это выглядит в android эмуляторе

EDIT 28/5/2020:

D/error: get failed with 
    com.google.firebase.firestore.FirebaseFirestoreException: Failed to get document from cache. (However, this document may exist on the server. Run again without setting source to CACHE to attempt to retrieve the document from the server.)
        at com.google.firebase.firestore.core.FirestoreClient.lambda$getDocumentFromLocalCache$9(com.google.firebase:firebase-firestore@@21.4.3:197)
        at com.google.firebase.firestore.core.FirestoreClient$$Lambda$9.then(Unknown Source:0)
        at com.google.android.gms.tasks.zzd.run(Unknown Source:5)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
I/TAG: Current value of i = 1
I/TAG: Current value of i = 2
I/TAG: Current value of i = 3
I/TAG: Current value of i = 4
I/TAG: Current value of i = 5
I/TAG: Current value of i = 6

очевидно firestore говорит, что я создал исходный КЭШ? чего я не делал

1 Ответ

1 голос
/ 26 мая 2020

Firebase использует Java соглашения об именовании стиля bean-компонентов при сопоставлении свойств вашего класса Java с полями в базе данных Firestore.

В этом соглашении ваши методы getVolume и setVolume сопоставляются в свойство / поле с именем volume, а getPDF и setPDF сопоставлены со свойством с именем pDF. Вы заметите, что оба имени начинаются со строчной буквы, а в вашем документе они начинаются с заглавной буквы. И поскольку это разные имена, ваш класс никогда не сможет читать из этого документа.

Вы можете управлять отображением свойств в поля, используя аннотацию к геттерам и сеттерам. Примерно так:

public class ChapterDetails {
    private String Volume,PDF;
    public ChapterDetails(){
        //empty
    }
    public ChapterDetails(String volume, String pdf) {
        Volume = volume;
        PDF = pdf;
    }

    @PropertyName("Volume")
    public String getVolume() {
        return Volume;
    }

    @PropertyName("Volume")
    public void setVolume(String volume) {
        Volume = volume;
    }

    @PropertyName("PDF")
    public String getPDF() {
        return PDF;
    }

    @PropertyName("PDF")
    public void setPDF(String PDF) {
        this.PDF = PDF;
    }
}

См. Также:

...