Reputation: 77
OK my question is simple, I want my google map to display the selected location on the map, I inserted the latitude and longitude myself into the database instead of through programming code, not sure whether this affects anything but I figure I let you guys know. I used 2 methods which I commented out in my code and each of them gave me different errors. Not sure I used the correct method but I need your guys help, almost done with my app.
MapsActivity:
private void getLocation(){
databaseLocation.child("Location").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Bundle b = getIntent().getExtras();
if (b != null) {
String sports = b.getString("TeamSport");
for (DataSnapshot child : dataSnapshot.getChildren()) {
if (child.getKey().equals(sports)) {
if (child.getKey().equals("latitude")) {
//latitude = Double.parseDouble(String.valueOf(child.getValue()));
//latitude = child.getValue(Double.class);
} else {
//longitude = Double.parseDouble(String.valueOf(child.getValue()));
//longitude = child.getValue(Double.class);
}
// Create LatLng for each locations
LatLng latlng = new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(latlng).draggable(true));
mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng));
//Setting onMarkerDragListener to track the marker drag
mMap.setOnMarkerDragListener(MapsActivity.this);
//Adding a long click listener to the map
mMap.setOnMapLongClickListener(MapsActivity.this);
moveMap();
} else {
Toast.makeText(getApplicationContext(), "No location found.", Toast.LENGTH_LONG).show();
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onConnected(Bundle bundle) {
getLocation();
}
My database:
Error when using child.getvalue():
com.google.firebase.database.DatabaseException: Failed to convert a value of type java.util.HashMap to double
at com.google.android.gms.internal.zzbtg.zzaD(Unknown Source)
at com.google.android.gms.internal.zzbtg.zzc(Unknown Source)
at com.google.android.gms.internal.zzbtg.zzb(Unknown Source)
at com.google.android.gms.internal.zzbtg.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at com.example.user.stfv2.MapsActivity$1.onDataChange(MapsActivity.java:148)
at com.google.firebase.database.Query$1.onDataChange(Unknown Source)
at com.google.android.gms.internal.zzbpx.zza(Unknown Source)
at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source)
at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
error when using parseDouble method:
java.lang.NumberFormatException: Invalid double: "{latitude=1.857204, longitude=103.087338}"
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.initialParse(StringToReal.java:114)
at java.lang.StringToReal.parseDouble(StringToReal.java:282)
at java.lang.Double.parseDouble(Double.java:301)
at com.example.user.stfv2.MapsActivity$1.onDataChange(MapsActivity.java:147)
at com.google.firebase.database.Query$1.onDataChange(Unknown Source)
at com.google.android.gms.internal.zzbpx.zza(Unknown Source)
at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source)
at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
In here, we can see it gets the right data i wanted.
Let me know if there's insufficient information. Thanks in advance.
Upvotes: 0
Views: 868
Reputation: 38299
These changes should produce better results:
for (DataSnapshot child : dataSnapshot.getChildren()) {
if (child.getKey().equals(sports)) {
// child is a snapshot of a sport location; Basketball or Football
// latitude and longitude are children of the sport shapshot
latitude = child.child("latitude").getValue(Double.class);
longitude = child.child("longitude").getValue(Double.class);
// Create LatLng for each locations
LatLng latlng = new LatLng(latitude, longitude);
...
} else {
Toast.makeText(getApplicationContext(), "No location found.", Toast.LENGTH_LONG).show();
}
}
Upvotes: 1