2017-01-10 6 views
0

Firebaseデータをフィルタリングしようとしていますが、私のデータセットは複雑ですが、ここではサンプルです。私はデータをうまく取り出すことができますが、Firebaseのクエリを使ってそのデータをフィルタリングすることはできません。ここではサンプルデータセットである:ここでリファレンスがデータを取得してもAndroidでFirebaseクエリが機能しない

enter image description here

は私のクエリです:

private double locStart; 
private double locEnd; 
Firebase mRef; 
Firebase mRef1; 

    mRef = new Firebase("https://test.firebaseio.com/"); 
mRef1 = mRef.child("test"); 

    final Intent intent = getIntent(); 
    final Inputs inputs = (Inputs) intent.getSerializableExtra("inputs"); 

    locStart = inputs.getLocLat() - 0.008983; 
    locEnd = inputs.getLocLat() + 0.008983; 

    Query filterData = mRef1.orderByChild("locLat").startAt(locStart).endAt(locEnd); 

    filterData.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Match matchd = dataSnapshot.getValue(Match.class); 
      Offer.setText(matchd.getfbName()); 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 

それがnull値を取得するとき、私はそれにクエリを適用し、そのときにのみmRef1は、完全にデータを取得する基準となります、データは確かにクエリに一致しますが、私は値をコード化してもハードですが、どちらもうまくいかないようです。

Firebaseコンソールに何か設定が必要ですか?私はインデックスをセットアップし、それはFirebaseがフィールドとインデックスを認識していることを意味する、フィールド上に設定するように私に示唆していた私のログの警告を解決しました。

答えて

1

Firebaseクエリは、リスト内の子ノードのサブセットを返します。

あなたが場所のリスト持っているのであれば:あなたはtestを照会しているが、不足している:あなたのデータはレベルが欠落している

ref.child("locations").orderByChild("lat").startAt(-12.0).endAt(-10) 

locations: { 
    location1: { lat: 42.010185, lon: -33.010185 }, 
    location2: { lat: -11.19645, lon: 52.461219 }, 
    location3: { lat: 33.14518, lon: -11.128746 } 
} 

をあなたはして場所を問い合わせることができlocation1location2location3私はそれの下にあるレベル。このようなレベルを追加すると、クエリは子に一致することができます。

次の問題は、Firebaseデータベースクエリが単一のプロパティで/ filterによってのみ注文できるということです。つまり、ジオクエリの場合、緯度の経度であるまたはのみをフィルタリングすることができ、ジオクエリの半分しか作成できません。ジオクエリーのライブラリであるGeoFireを調べることをお勧めします。各項目の緯度と経度を単一のgeohash値にまとめ、照会することができます。

+0

フランクに感謝します。あなたはまったく正しいのですが、これはFirebaseにデータを入力した方法でも、レコードが1つしかないことを前提にデータを取得していた方法です。forループを使ってdataSnapshotをループしていました。良い。助けてくれてありがとう。 また、私があなたに尋ねるかもしれない場合は、示唆した形式でデータを保存するためのコードやGitリポジトリがありますか? –

+0

私はGeofireへのリンクを提供しました。 –

+0

私はそれを実際に読んだことがありましたが、データの残りの部分をどのようにプッシュできるのかよく分かりませんでした。データの入力と検索の両方の方法を変更する必要があることはわかっていますが、わかっているGeofireの場所とともに残りのデータを入力する方法がありますか? –

関連する問題