2017-08-30 10 views
1

私は、ValueEventListenersを使用してFirebaseデータベースからデータを取得しています。今私はQueryからValueEventListenerを削除したいと思います。このような何か:アンドロイド:クエリに現在のValueEventListenerを追加するにはどうすればよいですか?

query.removeEventListener(listener); 

例外を取得する場合は、私が実際にそれを削除する前に、リスナーが既にクエリに追加されたかどうかを確認します。しかし、私はちょうどクエリが "持っている"リスナーをチェックする方法を見つけることができませんでした。また、クエリにアタッチされている現在のリスナーを取得することもできません。これは可能ですか?

答えて

2

はい、そうです。そうでない場合は、あなたが何かをするmeedはありません、あなたのリスナーは、ヌルに等しくない場合、既に取り付けた手段と、あなたがそれを削除する必要がある場合は

if(listener != null) { 
    query.removeEventListener(listener); 
} 

:あなたは、次のコードを使用する必要があります。

アクティビティのライフサイクルに従ってリスナーを削除する必要があることに注意してください。

Query class offical documentationによれば、クエリのリスナーを取得する方法はありません。リスナーを追加したら、削除するだけです。引数として渡されたリスナーの状態はチェックできません。

+0

あなたは間違っています。リスナーを作成(nullではありません)できますが、アタッチはできません。質問には、クエリにリスナーが付いているかどうかを知る方法はありますか? –

+0

@RazvanCristianLung誰かが 'query.removeEventListener(listener);を使用しているのであれば、リスナーが最初に作成されてからアタッチされたことを意味します。そのため、リスナーが特定のクエリにアタッチされている場合は、削除することが必須です。これを確認する唯一の方法は、無効をチェックすることです。 –

+0

同意すると、ユーザーは手動でリスナーをnullに設定する必要があります。しかし、依然として、OPの質問は異なります。 –

1

追加したリスナーのリストを取得することができないため、それらを追跡する必要がありますが、安全にquery.removeEventListener(listener)を呼び出すことができます。指定されたリスナーが添付されていない場合、何も起こりません。

DatabaseReferenceに接続されているすべてのリスナーを手動で削除する必要があることに注意してください。そうしないと、トリガーされます。

関連する問題