第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在返回語句之前從 FirebaseFirestore 獲取所有數據

如何在返回語句之前從 FirebaseFirestore 獲取所有數據

縹緲止盈 2023-07-13 17:35:47
我需要一個函數來從 FirebaseFirestore 獲取所有數據/注釋。如何讓這個函數在返回之前等待所有數據?我認為我創(chuàng)建的這個函數在主線程中不起作用,并且在從 firebase 獲取數據之前返回    public static ArrayList<NoteFB> getNotes() {        FirebaseFirestore db = FirebaseFirestore.getInstance();        final String TAG = "FB Adapter";        final ArrayList<NoteFB> doFBs = new ArrayList<>();        db.collection("notesItem")                .get()                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {                    @Override                    public void onComplete(@NonNull Task<QuerySnapshot> task) {                        if (task.isSuccessful()) {                            for (QueryDocumentSnapshot document : task.getResult()) {                                Log.d(TAG, document.getId() + " => " + document.getData());                                doFBs.add(document.toObject(NoteFB.class));                            }                        } else {                            Log.w(TAG, "Error getting documents.", task.getException());                        }                    }                });        return doFBs;    }        MyFBAdapter myFBAdapter = new MyFBAdapter(ShowActivity.this, FBAdapter.getNotes());        rvContacts.setAdapter(myFBAdapter);此代碼返回一個空的 ArrayList,它創(chuàng)建一個空的 recyclerview。
查看完整描述

2 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

最近出現了很多這樣的問題。我不久前就找到了解決方案:使用任務 API。


public static ArrayList<NoteFB> getNotes() {


    FirebaseFirestore db = FirebaseFirestore.getInstance();

    final String TAG = "FB Adapter";


    final ArrayList<NoteFB> doFBs = new ArrayList<>();


    try {

        Task<QuerySnapshot> taskResult = Tasks.await(db.collection("notesItem").get(), 2, TimeUnit.SECONDS)

        for (QueryDocumentSnapshot document : task.getResult()) {

            Log.d(TAG, document.getId() + " => " + document.getData());

            doFBs.add(document.toObject(NoteFB.class));

         }


    } catch(Exception e) {

         Log.w(TAG, "Error getting documents.", e.localizedString());

    }

    return doFBs

}

如果我犯了任何語法錯誤,請原諒我,我的 Java 有點生疏了。


確保您在主線程之外調用此代碼,否則它將崩潰。


查看完整回答
反對 回復 2023-07-13
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

您可以為此使用接口


public interface NoteDataInterface {

        void onCompleted(ArrayList<NoteFB> listNotes);

    }

更改您的方法以使用接口:


 public static void getNotes(NoteDataInterface noteDataInterface) {


        FirebaseFirestore db = FirebaseFirestore.getInstance();

        final String TAG = "FB Adapter";


        final ArrayList<NoteFB> doFBs = new ArrayList<>();

        db.collection("notesItem")

                .get()

                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {

                    @Override

                    public void onComplete(@NonNull Task<QuerySnapshot> task) {

                        if (task.isSuccessful()) {

                            for (QueryDocumentSnapshot document : task.getResult()) {

                                Log.d(TAG, document.getId() + " => " + document.getData());

                                doFBs.add(document.toObject(NoteFB.class));

                            }

                        } else {

                            Log.w(TAG, "Error getting documents.", task.getException());

                        }

                       noteDataInterface.onCompleted(doFBs);

                    }

                });



    }

然后調用你的方法:


 getNoteData(new NoteDataInterface() {

            @Override

            public void onCompleted(ArrayList<NoteFB> listNotes) {

                Log.e("listNotes>>",listNotes.size()+"");

            }

        });


查看完整回答
反對 回復 2023-07-13
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號