我有一个按钮,点击后将用户的坐标保存到FirebaseDatabase
并打开另一个活动,在此其他活动中,我会获取已保存的坐标,并根据它们在地图上显示Markers
。
问题在于,当我从我的第一个设备按下此按钮时,标记将在第二个活动中显示在地图上。现在,当我从我的第二个设备按下此按钮(同时在第一个设备中打开此活动)时,应用程序在第一个设备中崩溃,发出此错误:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference
但是两个标记都显示在地图中第二个设备和应用程序不会在那里崩溃。
这是我保存坐标的方式:
aUserReference.child(requestID.getText().toString()).child(MainActivity.uid).child("currentLngOfUser").setValue(String.valueOf(MainActivity.currentLngDouble));
这就是我如何抓取它们并尝试在地图上显示:
aUserReference.child(requestID).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getValue() != null) {
Map<String, String> newAUser = (Map<String, String>) dataSnapshot.getValue();
pAccepted = newAUser.get("name");
uidPPlayer = newAUser.get("dpUrl");
// error on the line below
currentLtAU = Double.parseDouble(newAUser.get("currentLatOfUser"));
currentLnAU = Double.parseDouble(newAUser.get("currentLngOfUser"));
playerMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(currentLtAU, currentLnAU)).title(pAccepted));
markersList.add(playerMarker);
// //get the latLngbuilder from the marker list
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker m : markersList) {
builder.include(m.getPosition());
}
//Bounds padding here
int padding = 100;
//Create bounds here
LatLngBounds bounds = builder.build();
//Create camera with bounds
final CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
//Check map is loaded
mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
//animate camera here
mMap.animateCamera(cu);
// mMap.isMyLocationEnabled();
// mMap.setMyLocationEnabled(true);
}
});
layout.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.INVISIBLE);
prepareDataAcceptedPlayers();
} else {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "Some error occurred. Please retry!", Snackbar.LENGTH_SHORT);
snackbar.show();
onBackPressed();
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
完整的堆栈跟踪:
FATAL EXCEPTION: main
Process: com.abc.xxx, PID: 3946
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference
at java.lang.StringToReal.parseDouble(StringToReal.java:263)
at java.lang.Double.parseDouble(Double.java:301)
at com.abc.xxx.ARequest$5.onChildAdded(ARequest.java:352)
at com.google.android.gms.internal.zzajg.zza(Unknown Source)
at com.google.android.gms.internal.zzalg.zzcxk(Unknown Source)
at com.google.android.gms.internal.zzalj$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:135)
at android.app.ActivityThread.main(ActivityThread.java:5318)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:922)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:717)
请告诉我这里出了什么问题以及为什么我在该参考文件中存储了某些内容时会收到nullpointerexception
。