【问题标题】:Recover cached data RecyclerView + Firestore恢复缓存数据 RecyclerView + Firestore
【发布时间】:2017-12-20 17:54:26
【问题描述】:

第一个活动是新闻提要屏幕,其中使用了 RecyclerView + Firestore。我启用了“离线设置”选项。

问题:

因为它是应用程序主页和新闻广播,我希望应用程序在内部扫描和检索 Firestore 数据时显示缓存数据。像 Instagram、Twitter 等...

因为目前在打开这个activity的时候,已经调用了Firestore Query,并且用RecyclerView挂载了数据。

在加载 Firestore 的新数据时,它会以某种方式显示 Recyclerview 上次更新的缓存数据。

因为当互联网连接是移动时,我们国家的质量很差。如果我最初不调用 Recyclerview,我会在很长一段时间内加载进度条,直到连接稳定。

我的代码是:适配器 Firestore + RecyclerView

编辑代码:

 /*Firebase*/
        mDb = FirebaseFirestore.getInstance();
        mDb.collection("IndexTimeline_User").document(mCurrentUser.getUid()).collection("Posts").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot documentSnapshots) {

                mQuery = documentSnapshots.getQuery();
                mCardFeedList.setAdapter(mAdapter);


            }
        });
        mDb.setFirestoreSettings(settings);


        /* Recycler */
        mCardFeedList = (RecyclerView) view.findViewById(R.id.explore_tab1_list);
        mCardFeedList.setHasFixedSize(true);
        mCardFeedList.setItemViewCacheSize(20);
        mCardFeedList.setDrawingCacheEnabled(true);

        mAdapter = new PostsExploreTab1Adapter(mQuery, this){

            @Override
            protected void onDataChanged() {

                if (getItemCount() == 0) {
                    mCardFeedList.setVisibility(View.GONE);
                    mProgressBar.setVisibility(View.GONE);
                    //mTxtVazio.setVisibility(View.VISIBLE);

                } else {
                    mCardFeedList.setVisibility(View.VISIBLE);
                    mProgressBar.setVisibility(View.GONE);
                    //mTxtVazio.setVisibility(View.GONE);
                }


            }
        };

        llmanager = new LinearLayoutManager(getActivity());
        mCardFeedList.setLayoutManager(llmanager);




        /*INICIADO O RECYCLERVIEW E ADAPTER*/
        if (mAdapter != null) {
            mAdapter.startListening();

        }

谢谢。

【问题讨论】:

  • 对于未来的访问者,您可以查看 here,其中我已经逐步解释了如何使用 Android 将 Firestore 中的数据显示到 RecyclerView

标签: android firebase google-cloud-firestore


【解决方案1】:

当您从数据库中获取数据时,使用addOnSuccessListener 并仅在从数据库加载数据时设置适配器。这意味着您将从缓存中读取数据,并且只有在新数据完全加载时才会被添加到 RecyclerView。您的代码应如下所示:

yourRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
        //get data
        mCardFeedList.setAdapter(mAdapter);
    }
});

【讨论】:

  • 但是我会在这里做这个查询吗?然后设置查询? (mQuery = mDb.collection("IndexTimeline_User").document(mCurrentUser.getUid()).collection("Posts");) @AlexMamo
  • 如果yourRef等于那个,是的,使用get()方法然后addOnSuccessListener
  • 我的参考与问题中的完全一样。它会起作用吗? prntscr.com/hqj4zt@AlexMamo
  • 很重要,你只需要设置一次适配器,在addOnSuccessListener。您需要删除再次设置适配器的最后一行。所以是的,应该工作。你试过了吗?
  • 我现在不能。稍后,我将进行测试。打扰一下。 @AlexMamo
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 2020-05-22
  • 1970-01-01
相关资源
最近更新 更多