2017-11-07 8 views
0

私はGPSポイントLatlngとPM2.5センサからのデータを送信するプロジェクトに取り組んでいますFirebaseデータベースを検索し、GPSポイントとその値を取得して、マップ上のセンサーの値に応じて色が異なるポイントをプロットすることができます。アイデアは、さまざまな場所にデータを含むデータベースを作成することです。センサーデータであるコンテンツのGPSポイントであるIDを作成するにはどうすればよいですか?もしそうなら、私はどのように私はタスクを完了することができるようにすべての値とキーの値を取得することができます。私の根本的な考えが間違っているなら、私を修正してください。アドバイスやヒントは深く感謝しています!ありがとうございました!Firebaseを使用して一連のセンサデータをデータベースに送信し、キーと値を一緒に取得する方法

public class PMInformation { 
 

 
     private int GPSLat; 
 
     private int GPSLng; 
 
     private int PM; 
 

 
     public PMInformation(int GPSLat,int GPSLng,int PM){ 
 
      this.GPSLat=GPSLat; 
 
      this.GPSLng=GPSLng; 
 
      this.PM=PM; 
 
     } 
 

 
     public int getGPSLat() { 
 
      return GPSLat; 
 
     } 
 

 
     public void setGPSLat(int GPSLat) { 
 
      this.GPSLat = GPSLat; 
 
     } 
 

 
     public int getGPSLng() { 
 
      return GPSLng; 
 
     } 
 

 
     public void setGPSLng(int GPSLng) { 
 
      this.GPSLng = GPSLng; 
 
     } 
 

 
     public int getPM() { 
 
      return PM; 
 
     } 
 

 
     public void setPM(int pm) { 
 
      this.PM = PM; 
 
     } 
 
    } 
 
    
 
    
 
    
 
    
 
    
 
     bt.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       myRef.push().setValue(new PMInformation(100,200,50)); 
 

 
      } 
 
     });

Firebaseデータベース

enter image description here

+1

これまでに何を試しましたか? –

+0

画像が示すように。私はこのようなデータベースを作成するためにpush()メソッドを使用しました。私は、push()によって生成された一意のIDを取得し、内部で値(GPSポイントとセンサーデータ)を取得するためにそれらを使用する方法を見つけることができません。答えてくれてありがとう! –

答えて

0

DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
// create a key from latitude and longitude with a separator --> e.g. 100000_50000 
String latLongKey = Integer.toString(lat) + "_" + Integer.toString(long); 
int sensorValue = 23; 
database.child("points").child(latLongKey).setValue(sensorValue); 

これは、次のようなデータベースを作成します。

{ 
    "points": { 
    ... 
    "100000_50000": 23, 
    ... 
    } 
} 

明らかに、経度/緯度の組は一意でなければなりません。

値を取得するには、次の

database.child("points").addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot entry: dataSnapshot.getChildren()) { 
      String latLongKey = entry.getKey(); 
      // I won't go into the details how to extract long and lat from the string 
      ... 
      int sensorValue = (int) entry.getValue(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
    } 
}); 

私はデータのリストの操作に関するthisチュートリアルをお勧めします。

ヒント:

あなたは経度と緯度のための整数を使用します。通常、これらの値は実数になりますが、整数の中で固定小数点数を使うことができますが、その場合は通常は浮動小数点数を使う方が良いと思います。

+0

私がfloatを使用すると、エラーが発生しました。しかし、私が整数を使用する場合、その場所は正確ではありません...無効なFirebaseデータベースパス:23.6939645_120.5363532。 Firebaseのデータベースパスに '。'、 '#'、 '$'、 '['、 ']'を含めることはできません。 –

+0

解決策は、long-latキーを固定小数点数として解釈し、小数点記号を省略することです。 longとlatitudeは常に-180〜+180の範囲の値です。小数点の区切り記号は、最初の数字の後に常に3桁で表示されます。例:-148.847/4.8762 - > -148847_0048762ハイフンはマイナス記号としてキーに許可された文字なので、それを使用すると問題ありません。 long値とlat値を子ノードとしても書き込むので、ノードを読み取るときに解析する必要はありません。希望が助けてくれる! –

+0

あなたの答えは私の必要を満たしました。ありがとうございました! –

0

実は、あなたがそのデータを表示するために、すべてのこれらのIDを取得する必要はありません、あなただけのgetChildren()メソッドを使用する必要があります。 PMdatabaseがあなたのFirebaseルートの直接の子であると仮定すると、次のコードを使用してください:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference yourRef = rootRef.child("PMdatabase"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      int gpslat = ds.child("gpslat").getValue(Integer.class); 
      int gpslng = ds.child("gpslng").getValue(Integer.class); 
      int pm = ds.child("pm").getValue(Integer.class); 
      Log.d("TAG", gpslat + "/" + gpslng + "/" + pm); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
yourRef.addListenerForSingleValueEvent(eventListener); 

アウトは次のようになります。のようなもので行くエントリを保存するには

100/200/50 
100/200/50 
100/200/50 
//an so on 
+0

助けてくれてありがとう! –

関連する問題