2016-05-31 3 views
0

私はFiremapリアルタイムデータベースを持っており、Googlemap上の場所に関連する項目のセットを持っています。したがって、Firebaseのすべての子は、このようなデータ構造を持っています。必要に応じて手動でFirebaseからデータを取得することができます。

-item 
latitude:"5511231165654" 
longitude:"516891812013216" 
postalcode: "10013" 
cityname: "New York" 

私のアプリでは、データベースのすべてのアイテムがマーカーの形でGooglemapの関連する場所に追加されています。 すべてのユーザーにすべてのアイテムを送信することは良い考えではないと思います。ユーザーに関連するこれらのアイテムだけを送信する方が効率的です。これらのアイテムは、ユーザーと同じエリアにいるユーザーで、この場合は同じエリアは同じ郵便番号を意味します。私はこのクエリ

Query sortedByLocation = myRef.orderByChild("postalcode").equalTo(currentpostalcode); 
sortedByLocation.addListenerForSingleValueEvent(
new ValueEventListener() { 
     . 
     . do something 
     . 
} 

を構築し、これを処理するには

私はまた、ジオコーダからcitynameをcurrentpostalcodeを得ました。現在、問題はジオコーダーが郵便番号を解読できず、それに対してヌルを返すことができない場合がありますが、それは必ずcitynameを返します。だから私はクエリを

に変更しました
Query sortedByLocation = myRef.orderByChild("cityname").equalTo(currentcity); 

どうすればこれらの2つのクエリーを組み合わせることができますか?私はこのような何かをしたい:

is postalcode == null than check for cityname 

他の質問は、必要に応じて手動でデータを取得することが可能ですか?

ユーザーがアプリを起動したとすると、アプリはユーザーと同じエリアにあるすべてのアイテムを取得するようになりましたが、ユーザーはこのエリアを離れて他のエリアに移動します。

アプリを再起動せずにこの新しい領域の新しいデータを取得する方法を教えてください。

答えて

0

Firebaseクエリには、単一のソート/フィルタ条件のみを含めることができます。

複数の値を1つのプロパティに組み合わせて、必要な動作を得ることができます。その例については、私の答えはここをクリックしてください:Query based on multiple where clauses in firebase

GeoFireは一般的に、GeoHash(経度と緯度を1つのプロパティに結合する方法)を使用して、アイテムをフィルタリングできるポイントまでの距離に基づいて現時点では、GeoFire for Javaの更新版はまだ動作しています。

関連する問題