首页 > 解决方案 > 请帮助我尝试在空对象引用上调用虚拟方法“void com.google.android.gms.maps.GoogleMap.setOnMapLongClickListener”

问题描述

我想向您解释一下,这个应用程序运行正常,没有任何崩溃,但是当我第二次打开它开始崩溃时,我的意思是代码是相同的,我的代码没有任何变化,但突然它开始崩溃,所以这是我的代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mView = inflater.inflate(R.layout.fragment_frag_location, container, false);
    track=(Button) mView.findViewById(R.id.track);
    track.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LatLng child=getvalue();
            String currentString = child.toString();
            String[] separated = currentString.split("lat/lng:");
            String a=separated[0];
            String b=separated[1];

            try {
                Intent intent = new Intent(Intent.ACTION_VIEW,
                        // Uri.parse("http://maps.google.com/maps?saddr="+lat_double+","+long_double+"&daddr="+lat_double+","+long_double));
                        Uri.parse("http://maps.google.com/maps?daddr="+b));
                intent.setPackage("com.google.android.apps.maps");
                startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

    //
    PassChildId = getActivity().getIntent().getStringExtra("childId");
    return mView;
}

这是 onviewcreate 代码:

   @Override
public void onViewCreated(View view,Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mMapView = (MapView) mView.findViewById(R.id.map);

    if (mMapView != null) {
        mMapView.onCreate(null);
        mMapView.onResume();
        mMapView.getMapAsync(this);
    }
}

这是 mapready 方法代码:

  @Override
public void onMapReady(final GoogleMap googleMap) {


    this.googleMap = googleMap;
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Location");
    reference.orderByChild("ID").equalTo(PassChildId).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.hasChild(PassChildId)) {
                abc = dataSnapshot.getValue().toString();
                Log.e("sdsd", " " + abc);
                String[] abcd = abc.split("latlong=");
                String[] abcd2 = abcd[1].split(Pattern.quote("}"));
                abc = abcd2[0];


                String latlong = abc;
                String[] la = latlong.split(",");
                childLocation = new LatLng(Double.valueOf(la[0]), Double.valueOf(la[1]));
                googleMap.addMarker(new MarkerOptions().position(childLocation).title("Child Location"));

                googleMap.moveCamera(CameraUpdateFactory.newLatLng(childLocation));
                googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(childLocation, 16.0f));

                // TODO: 8/9/2018 Current Login User Location...
                if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    return;
                }
                googleMap.setMyLocationEnabled(true);
                LocationManager locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
                Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

                // TODO: 8/9/2018 If GPS is Null
                if (location == null){
                    Criteria criteria = new Criteria();
                    criteria.setAccuracy(Criteria.ACCURACY_COARSE);
                    String provider = locationManager.getBestProvider(criteria, true);
                    location = locationManager.getLastKnownLocation(provider);
                }

                // TODO: 8/9/2018 IF GPS is not Null...
                if (location != null){
                    LatLng userLocation = new LatLng(location.getLatitude(), location.getLongitude());
                    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(userLocation,12.0f),1500,null);
                }



            }else {
                //
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError)
        {

        }
    });
}
public LatLng getvalue(){
   return childLocation;
}

}

标签: android

解决方案


推荐阅读