私はGoogle Maps MapView
を使用するアプリケーションを持っています。私のマップでは、Firebase Realtimeデータベースに保存するマーカーを挿入できます。私はプッシュキーやマーカーを置くHashMap
を持って、私のフラグメントでAndroid - Firebaseが正しく挿入されない
public class FirebaseMarker {
String address;
String time;
double latitude;
double longitude;
...
}
:私はFirebaseMarker
クラスを持っています。ボタンを押すと、これらのマーカーがデータベースに保存されます。
public class MapFragment extends Fragment implements OnMapReadyCallback {
HashMap<String, Object> markers = new HashMap<>();
public void onMapReady(final GoogleMap googleMap) {
String markerIds = userRef.push().getKey();
FirebaseMarker marker = new FirebaseMarker(address, time, latitude, longitude);
markers.put(markerIds, marker);
}
private void saveToDatabase(){
userRef.child(sharedPreferences.getString("school", null)).child("markers").updateChildren(markers);
}
}
これは正常に動作しますが、私はまたFirebase内の異なるノード内のほんの一部のプロパティ(PartialMarker
)と同じマーカーを追加したいです。これは、常にデータベースに欠けている部分マーカーが1つあるので、私に問題をもたらします。したがって、マップ上に3つのマーカーを置くと、ノード内のデータベースには2つの部分マーカーしか保存されません。その後
public class PartialMarker {
String address;
String time;
..
}
を私が行います:私がやっていること
public class MapFragment extends Fragment implements OnMapReadyCallback {
HashMap<String, Object> partialMarkers= new HashMap<>();
public void onMapReady(final GoogleMap googleMap) {
for (Map.Entry<String, Object> entry : markers.entrySet()) {
String key = entry.getKey();
FirebaseMarker marker = (FirebaseMarker) entry.getValue();
partialMarkers.put(key, new PartialMarker(marker.getAddress(), marker.getTime()));
}
}
private void saveToDatabase(){
userRef.child(sharedPreferences.getString("school", null)).child("markers").updateChildren(markers);
userRef.child(sharedPreferences.getString("school", null)).child("routes").child(routeId).child("partialMarkers").updateChildren(partialMarkers);
}
}
マーカーノード:
部分マーカーノード:
saveToDatabase()はいつ使用しますか?完全なコードを追加してください。 – MarcGV
コードは問題なく表示されるため、他にも問題がある可能性があります。完全なコードサンプルを共有できますか? 'FirebaseMarker marker = new FirebaseMarker([...])'を実行するときにも、 'PartialMarker partialMarker = new PartialMarker([...])を実行すると同時に、両方のマーカーを同時に作成すると、 ) 'を作成し、それらを異なるマップに入れると、各リストには常に正しい数の項目が存在するはずです。 'PartialMarker'マップを' FirebaseMarker'マップと同期して作成していない可能性があります。 – Grimthorr
@Grimthorrによると、部分マーカーマップの同期が外れている可能性が最も高いです。 'saveToDatabase()'にブレークポイントを置き、両方のマップの長さを数えます。もしそれらが本当に同じであれば、実行可能な小さな断片で問題を切り分けることができますか?そのため、テストするアプリにコピー/貼り付けできるハードコーディングされた値があります。 –