2017-08-01 11 views
0

私は、オンラインまたは最後に見たときのユーザーステータスを更新する必要のあるアプリケーションを持っています。これを行うには、ステータスフィールドを「オンライン」に設定し、ServerValue.TIMESTAMPをonStart()に、onStop()をそれぞれアクティビティごとに設定します。しかし、私が直面している問題は、アクティビティAの2つのアクティビティAとB、onStop()が呼び出され、ステータス値がタイムスタンプに更新され、アクティビティBのonStart()が呼び出されたが、 。Firebaseデータベースへの同時クエリが期待どおりに機能しない

同じ方法で同じクエリを順番に実行することでこれをテストしようとしましたが、動作しましたが、アクティビティを切り替えると機能しません。
はとても基本的に、これは働いている:(またはクエリの任意の組み合わせ、二つ以上も

onStop(){ 
FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("status").setValue("online"); 
FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("status").setValue(ServerValue.TIMESTAMP); 
} 

しかし、これではありません。

//Activity A 
onStop(){ 
FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("status").setValue(ServerValue.TIMESTAMP); 
} 

//Activity B 
onStart(){ 
FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("status").setValue("online"); 
} 

これが唯一の "タイムスタンプを更新しますがありませんオンライン"。
私が間違って何をしているのですか?

+0

Firebaseクライアントは、コードが実行される順序でサーバーにコマンドを送信します。したがって、アクティビティBの 'onStart'がアクティビティAの' onStop'の前に実行されるようです。これを確認するには、いくつかのロギングを追加します。 –

+0

@Frank van Puffelenはい、それは起こっていることです。私はonPause()とonResume()を使って修正しました。ありがとうございました。このような愚かな質問のように思える。 –

+0

まあ...私は 'onStart()'が最初に起動するかどうかわかりませんでした。しかし、Firebaseがどのように動作するかの振舞いと私の理解を考えれば、それは唯一の選択肢でした。 –

答えて

0

Firebaseクライアントは、コードが実行される順序でサーバーにコマンドを送信します。アクティビティBのonStartがアクティビティAのonStopの前に実行されているようです。

これを確認するには、いくつかのログを追加します。

関連する問題