![](/img/trans.png)
[英]How to check in realtime if Location services switched off by user in a tracking app
[英]How to change database value if user's internet is switched off
在過去的幾天中,我一直在嘗試顯示用戶的聯機/脫機狀態。為此,我進行了一個注冊活動,他們在該處進行注冊,並且他們的信息被保存在Firebase中,如果他們退出活動,我將覆蓋其onstop方法,並將值設置為離線...但是如果用戶突然失去互聯網連接,它仍然顯示為在線..我無法將其更改為離線,因為需要互聯網來更改數據庫,並且使用沒有互聯網...所以我如何將數據庫值設置為脫機...我用google搜索了一些關於此的內容,但沒有找到任何內容...有人可以幫我嗎
我的密碼
@Override
protected void onStart() {
super.onStart();
fetchData();
// mDatabaseReference.child("UserData").child(UID).child("Online").setValue("True");
}
@Override
protected void onStop() {
super.onStop();
fetchData();
// mDatabaseReference.child("UserData").child(UID).child("Online").setValue(false);
}
您要嘗試做的事情稱為在線狀態系統。 Firebase數據庫具有一個允許這樣做的特殊API: onDisconnect()
。 當將處理程序附加到onDisconnect()
,當服務器檢測到客戶端已斷開連接時,指定的寫操作將在服務器上執行。
這是一個使用
onDisconnect
原語在斷開連接時寫入數據的簡單示例:DatabaseRef presenceRef = FirebaseDatabase.getInstance().getReference("disconnectmessage"); // Write a string when this client loses connection presenceRef.onDisconnect().setValue("I disconnected!");
在您的情況下,這可能很簡單:
protected void onStart() {
super.onStart();
fetchData();
DatabaseReference onlineRef = mDatabaseReference.child("UserData").child(UID).child("Online");
onlineRef.setValue("True");
onlineRef.onDisconnect().setValue("False");
}
請注意,這將在簡單情況下起作用,但是例如在您的連接快速切換時將開始出現問題。 在那種情況下,服務器檢測到客戶端消失的時間可能會比客戶端重新連接花費的時間更長(因為這可能取決於套接字超時),從而導致無效的False
。
為了更好地處理這些情況,請查看文檔中的示例存在系統,該系統對邊緣案例的處理更為精細。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.