给java.lang.NullPointerException:当我单击当前位置按钮时

Mayur.p

当我单击当前按钮以获取用户的当前位置时,即使我检查是否已授予fusedapi,也给出nullpointer异常;当用户允许当前位置访问时,我也会检索当前位置,但显示错误

MapFragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootview = inflater.inflate(R.layout.fragment_map, container, false);

    latlng.add(new LatLng(22.32371, 73.16409));
    latlng.add(new LatLng(22.32737, 73.17566));
    latlng.add(new LatLng(22.28, 73.1903696));
    latlng.add(new LatLng(22.334, 73.21853));
    latlng.add(new LatLng(22.40303, 73.22369));
    latlng.add(new LatLng(22.55148, 72.97035));

    SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);  //use SuppoprtMapFragment for using in fragment instead of activity  MapFragment = activity   SupportMapFragment = fragment
    mapFragment.getMapAsync(this);


    askPermission();
    createGoogleApi();

    mbtn = rootview.findViewById(R.id.myLocationButton);
    mbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getcurrentmarker();
        }
    });

    return rootview;
}


@Override
public void onMapReady(GoogleMap googleMap)
{
    mgoogleMap = googleMap;
    mgoogleMap.setOnMarkerClickListener(this);
}

@Override
public void onStart() {
    super.onStart();
    // Call GoogleApiClient connection when starting the Activity
    googleApiClient.connect();
}


@Override
public void onStop() {
    super.onStop();

    // Disconnect GoogleApiClient when stopping Activity
    googleApiClient.disconnect();
}


private void createGoogleApi()
{
    Log.d(TAG, "createGoogleApi()");
    if ( googleApiClient == null )
    {
        googleApiClient = new GoogleApiClient.Builder( getContext() )
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener( this )
                .addApi(LocationServices.API)
                .build();
    }
}


// Check for permission to access Location
private boolean checkPermission() {
    Log.d(TAG, "checkPermission()");
    // Ask for permission if it wasn't granted yet
    return (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED );
}

// Asks for permission
private void askPermission() {
    Log.d(TAG, "askPermission()");

    ActivityCompat.requestPermissions(
            MapFragment.super.getActivity(),
            new String[] { Manifest.permission.ACCESS_FINE_LOCATION },
            REQ_PERMISSION
    );
}

// Verify user's response of the permission requested
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == REQ_PERMISSION) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(getContext(), "Permission", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getContext(), "Permission DENIED", Toast.LENGTH_SHORT).show();
        }
    }
}


// App cannot work without the permissions
private void permissionsDenied() {
    Log.w(TAG, "permissionsDenied()");

}


// Start location Updates
private void startLocationUpdates(){
    Log.i(TAG, "startLocationUpdates()");
    locationRequest = LocationRequest.create()
            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
            .setInterval(6000)
            .setFastestInterval(5000);
    //movement in meter

    if ( checkPermission() )
        LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
}

@Override
public void onLocationChanged(Location location) {
    Log.d(TAG, "onLocationChanged ["+location+"]");
    lastLocation = location;
    writeActualLocation(location);
}


@Override
public void onConnected(@Nullable Bundle bundle) {
    Log.i(TAG, "onConnected()");
    getLastKnownLocation();
}

// GoogleApiClient.ConnectionCallbacks suspended
@Override
public void onConnectionSuspended(int i) {
    Log.w(TAG, "onConnectionSuspended()");
}

// GoogleApiClient.OnConnectionFailedListener fail
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    Log.w(TAG, "onConnectionFailed()");
}

// Get last known location
private void getLastKnownLocation() {
    Log.d(TAG, "getLastKnownLocation()");
    if ( checkPermission() ) {
        lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
        if ( lastLocation != null ) {
            Log.i(TAG, "LasKnown location. " +
                    "Long: " + lastLocation.getLongitude() +
                    " | Lat: " + lastLocation.getLatitude());
            writeLastLocation();
            startLocationUpdates();
        } else {
            Log.w(TAG, "No location retrieved yet");
            startLocationUpdates();
        }
    }
    else askPermission();
}

private void writeActualLocation(Location location)
{
        lastLocation = location;
        showmarker(latlng);
}

private void writeLastLocation() {
    writeActualLocation(lastLocation);
}



private void getcurrentmarker()
{
    if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    mgoogleMap.setMyLocationEnabled(true);
    mgoogleMap.getUiSettings().setMyLocationButtonEnabled(false);
    mgoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lastLocation.getLatitude(), lastLocation.getLongitude()), 14));
}

private void showmarker(List<LatLng> positions)
{
    Log.d(TAG,"show");
    if(!markers.equals(null))
    {
        markers.clear();
    }
    if ( marker != null ) {
        marker.remove();
    }
    for (LatLng position : positions) {
        Marker marker = mgoogleMap.addMarker(
                new MarkerOptions()
                        .position(position)
                        .visible(false)); // Invisible for now
        markers.add(marker);
    }

    for (Marker marker : markers) {
        if (SphericalUtil.computeDistanceBetween(new LatLng(lastLocation.getLatitude(),lastLocation.getLongitude()), marker.getPosition()) < 400) {
            marker.setVisible(true);
            float zoom = 14f;
            CameraUpdate cameraUpdate1 = CameraUpdateFactory.newLatLngZoom(marker.getPosition(), zoom);
            mgoogleMap.animateCamera(cameraUpdate1);
        }
    }

}

@Override
public boolean onMarkerClick(Marker marker)
{
    BottomSheetFragment bottomSheetFragment = new BottomSheetFragment(lastLocation,marker.getPosition());
    bottomSheetFragment.show(getFragmentManager(), bottomSheetFragment.getTag());
    return false;
}

}

表现

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在连接googleapiclient之前,我先询问当前位置的权限,然后检索当前位置,然后单击当前位置按钮

日志猫

java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
    at com.example.eats.Fragment.MapFragment.getcurrentmarker(MapFragment.java:256)
基兰CSN

检查位置是否启用/禁用状态。如果位置被禁用,则结果为null。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我尝试使按钮不可见时,java.lang.NullPointerException

GeoPoint无法获取我当前的位置并抛出java.lang.NullPointerException

在按钮单击时获取 IllegalStateException - 由:java.lang.NullPointerException 引起

当我尝试将值添加到Array时java.lang.NullPointerException

当我创建使用其他类的值的数组时,java.lang.NullPointerException

当我尝试在Vaadin View中初始化方法时,我得到java.lang.NullPointerException:null

java.lang.NullPointerException?

我在尝试检查internetConnection时得到java.lang.NullPointerException?

当我单击 Java GUI 上的按钮时,如何打开一个新窗口并关闭当前窗口?

java.lang.NullPointerException按下按钮(在“搜索按钮”上)时出现NullpointerException

创建DiskFileItem时java.lang.NullPointerException

JDBC:java.lang.NullPointerException

java.lang.NullPointerException :(片段)

java.lang.nullpointerexception错误

遇到java.lang.NullPointerException

getResourceAsStream 的 java.lang.NullPointerException

java.lang.NullPointerException错误?

java.lang.NullPointerException: uriString

Jmeter java.lang.NullPointerException

java.lang.NullPointerException出现

java.lang.NullPointerException OnItemClickListener

java.lang.NullPointerException错误

mainactivity-java.lang.NullPointerException

java.lang.NullPointerException错误

java.lang.NullPointerException PrintWriter

引起:java.lang.NullPointerException:

java.lang.NullPointerException:在按钮上单击侦听器

由于 java.lang.NullPointerException,当我尝试从一个活动移动到另一个活动时,我的应用程序崩溃

java swing单选按钮-java.lang.NullPointerException