-1

활동을 시작하면 내 앱이 멈 춥니 다. 데이터베이스와 좌표에서 좌표를 가져와야합니다. 나는 어디에 문제가 있는지 모른다.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

먼저 PIN이이 같은 시도 당신은에 대한 참조를 넣어 야한다 DatabaseReference f_database = FirebaseDatabase.getInstance().getReference("Blog");

firebase reference를 DatabaseReference f_database = FirebaseDatabase.getInstance().getReference()에 올릴 때. 귀하의 경우에 데이터베이스의 모든 노드를 가져옵니다 블로그. 블로그의 정보가 필요한 경우 사용자의 데이터를 가져올 필요가 없습니다. firebase의 경우 코드 연습이 매우 어렵습니다.

둘째, @Benjith binja가 블로그의 하위 항목을 가져 와서 위도 & 경도를 가져올 수 있다고 제안했습니다. 또는 블로그 개체를 만들고 데이터를 가져와야합니다. 그것은 좋은 습관입니다. https://firebase.google.com/docs/database/android/read-and-write

블로그 개체 :

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; 
    } 
} 

중포 기지 리스너는 다음과 같이 보일 것입니다 :

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) { 

    } 
});