-1

私はあなたの活動を停止する私のアプリを停止します。私はdatabesと場所のマーカーから座標を取得する必要があります。私はどこに問題があるのか​​分からない。私はfirebaseからマーカーを得ることができません

マイデータベース:あなたは、すべてのブログの子を取得したい場合は

enter image description here

public class MapsActivityUser extends FragmentActivity implements OnMapReadyCallback { 

private GoogleMap mMap; 
DatabaseReference f_database = FirebaseDatabase.getInstance().getReference(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps_user); 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
} 
@Override 
public void onMapReady(GoogleMap googleMap) { 

    mMap = googleMap; 
    f_database.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot child : dataSnapshot.getChildren()) { 
       Map data = (Map) child.getValue(); 
       Map mCoordinate = (HashMap)data.get("Blog"); 
       double latitude = (double) (mCoordinate.get("lat")); 
       double longitude = (double) (mCoordinate.get("lng")); 
       LatLng location = new LatLng(latitude,longitude); 
       googleMap.addMarker(new MarkerOptions().position(location).title("pedik")); 
      } 
     } 


     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+1

エラーログで更新してください。 –

答えて

1

は、緯度とLNGは

f_database.child("Blog").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot snapshot: dataSnapshot.getChildren()) {   
       double latitude = (double) (snapshot.child("lat").getValue()); 
       double longitude = (double) ((snapshot.child("lng").getValue()); 
       LatLng location = new LatLng(latitude,longitude); 
       googleMap.addMarker(new MarkerOptions().position(location).title("pedik")); 
      } 
     } 


     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

本当にありがとうございました))) –

0

まずretriveするために、このようにしてくださいあなたはあなたの参照を置くべきですDatabaseReference f_database = FirebaseDatabase.getInstance().getReference("Blog");

火災基地の参考資料をDatabaseReference f_database = FirebaseDatabase.getInstance().getReference()に置いたとき。これにより、データベースのすべてのノードがフェッチされます。ブログおよびユーザー。ブログの情報が必要な場合は、ユーザーのデータを取得する必要はありません。 firebaseになると、これは非常に貧弱なコードプラクティスです。 @Benjith binjaが提案されているよう

第二に、あなたは緯度経度に&を取得するために、すべてのブログの子を取得することができます。また、Blogオブジェクトを作成してデータを取得する必要があります。それは良い習慣です。 https://firebase.google.com/docs/database/android/read-and-write

Blogオブジェクトは:

class Blog { 
    public String desc,id,image,time,title,uid,username; 
    public Double lat,lng; 

    public Blog(String desc, String id, String image, String time, String title, String uid, String username, Double lat, Double lng) { 
     this.desc = desc; 
     this.id = id; 
     this.image = image; 
     this.time = time; 
     this.title = title; 
     this.uid = uid; 
     this.username = username; 
     this.lat = lat; 
     this.lng = lng; 
    } 
} 

firebaseリスナーは次のようになります:

DatabaseReference f_database = FirebaseDatabase.getInstance().getReference("Blog"); 
ValueEventListener listener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if(dataSnapshot.exists()){ 
      for(DataSnapshot snapshot:dataSnapshot.getChildren()){ 
       // Get Blog object and use the values to update the UI 
       Blog blog = snapshot.getValue(Blog.class); 
       LatLng location = new LatLng(blog.lat,blog.lng); 
       googleMap.addMarker(new MarkerOptions().position(location).title("pedik")); 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}; 
f_database.addListenerForSingleValueEvent(listener); 

エラーは、地図の間違った使い方が原因で発生しなければなりません。あなたのコードがどのように見えるかは次のとおりです。

@Override 
public void onMapReady(GoogleMap googleMap) { 

mMap = googleMap; 
f_database.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot child : dataSnapshot.getChildren()) { 
      Map data = (Map) child.getValue(); 
      Map mCoordinate = (HashMap)data.get("Blog"); 
      //mCoordinate is a map with values of all the children of Blog 
      for(String key: mCoordinate.keySet()){ 
       Map mCoordinateChildMap = (HashMap) mCoordinate.get(key) 
       double latitude = (double) (mCoordinateChildMap.get("lat")); 
       double longitude = (double) (mCoordinateChildMap.get("lng")); 
       LatLng location = new LatLng(latitude,longitude); 
       googleMap.addMarker(new MarkerOptions().position(location).title("pedik")); 
      } 
     } 
    } 


    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 
関連する問題