尝试根据FirebaseDatabase

时间:2016-11-26 19:43:27

标签: android google-maps google-maps-api-3 nullpointerexception google-maps-markers

我有一个按钮,点击后将用户的坐标保存到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

0 个答案:

没有答案