سؤال

ليس سؤال Firebase فقط، ولكنني أستخدم Firebase لنشر منشورات إلى الواجهة الخلفية من Android وتشغيله 10 مرات، مرة كل ثانية.

Firebase ref = new Firebase(URL);
ref.child("Time").setValue(Currentime());

لكن هذه مكالمة غير متزامنة وعندما أضع حلقة زمنية:

while (time_now < time_start + 10 seconds) {
     Firebase ref = new Firebase(URL);
     ref.child("Time").setValue(Currentime());
}

يبدو أنه يتم تشغيل حلقة while أولاً ثم ~10 مكالمات Firebase في النهاية.هل هناك طريقة لإضافة مهلة بحيث تفرض تشغيل المكالمات غير المتزامنة (Firebase) لمدة ثانية قبل الاتصال بالمكالمة غير المتزامنة التالية؟

هل كانت مفيدة؟

المحلول

إذا نظرت إلى مثال جافا على موقع ويب Firebase, ، سترى أنه يحتوي على doTransactions طريقة و onComplete طريقة:

Firebase countRef = new Firebase(URL);
Transaction.Handler handler = new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(MutableData currentData) {
        // set the new time
        ...
    }

    @Override
    public void onComplete(FirebaseError error, boolean committed, DataSnapshot currentData) {
        if (error != null) {
            ...
        } else {
            if (!committed) {
                ...
            } else {
                // transaction committed, do next iteration
                ...
            }
            ...
        }
    }
});
countRef.runTransaction(handler);

لذلك قمت بتعيين الوقت الجديد في doTransaction طريقة:

// set the new time
currentData.setValue(time_now);
return Transaction.success(currentData);

ثم ابدأ التكرار التالي في onComplete طريقة.

// transaction committed, do next iteration
if (time_now < time_start + 10 seconds) {
    countRef.runTransaction(handler);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top