Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firestore查询未将所有项目检索到Firestore RecyclerView中_Java_Android_Firebase_Google Cloud Firestore_Firebaseui - Fatal编程技术网

Java Firestore查询未将所有项目检索到Firestore RecyclerView中

Java Firestore查询未将所有项目检索到Firestore RecyclerView中,java,android,firebase,google-cloud-firestore,firebaseui,Java,Android,Firebase,Google Cloud Firestore,Firebaseui,目前我只从CloudFireStore中检索最大大小的项目-1,这意味着如果有3个项目,它将只检索2个。我可以知道从collection.document.collection检索项目时我做错了什么吗 这是我的章节片段,用xml保存RecyclerView public class ChapterFragment extends Fragment { FirebaseFirestore db; private RecyclerView recyclerView; priv

目前我只从CloudFireStore中检索最大大小的项目-1,这意味着如果有3个项目,它将只检索2个。我可以知道从collection.document.collection检索项目时我做错了什么吗

这是我的章节片段,用xml保存RecyclerView

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);
        }
    }
}
2020年5月28日编辑:

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是说我创建了源缓存?在将Java类中的属性映射到Firestore数据库中的字段时,Firebase使用JavaBean样式的命名约定

在此约定中,getVolume和setVolume方法映射到名为volume的属性/字段,getPDF和setPDF映射到名为pDF的属性。您将注意到,这两个名称都以小写字母开头,而在文档中它们都以大写字母开头。由于这些名称不同,您的类将永远无法读取此文档

您可以通过在getter和setter上使用``注释来控制属性到字段的映射。大概是这样的:

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;
    }
}
另见:

Firestore文档中的。 一个解决问题的方法。
嗨@Alex Mamo我可以知道这是如何回答我的问题的吗?在某种程度上,你应该更改字段的名称或使用注释。请核对副本。在你的类中,你应该在数据库中也有名为小写的字段。@AlexMamo我按照帖子所说的做了,并将它们改为小写,但现在我甚至看不到其中的任何一项recyclerview@Alex:我丢失了:我丢失了你的链接,但请随意将其添加到最后的“请参阅”列表中。也就是说,显然OPs的问题不在于属性名称,也不知道数据库结构和代码会如何工作,而在于项目的数量。但我也不认为它会跳过更多文档中的一个。有趣的假设Alex。嗨,很抱歉这么说,但我刚刚尝试了这个,它返回了相同的结果maxsize-1你看到Alex关于为什么会这样的评论了吗?您好,您是在说可能有不同名称的卷吗?如果是这样的话,我已经检查过了,它的字段都是Volume
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;
    }
}