在Java中向异步调用添加超时

时间:2014-04-12 22:35:52

标签: java android asynchronous firebase

不仅仅是Firebase问题,而是我使用Firebase向Android后端发帖并运行10次,每秒一次。

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

然而,这是一个异步调用,当我放入while循环时:

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

它似乎首先运行while循环,然后最后运行~10个Firebase调用。有没有办法添加超时,以便在调用下一个异步调用之前强制异步(Firebase)调用运行一秒钟?

1 个答案:

答案 0 :(得分:2)

如果查看Java example on the Firebase web site,您会发现它有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);
}