Java 从“getLatitude”地图Android Studio获取空值

Java 从“getLatitude”地图Android Studio获取空值,java,android,null,maps,Java,Android,Null,Maps,我最近开始使用Android Studio,我只是从基础开始。 我尝试加载一个谷歌地图页面,它工作正常。但是,每当我尝试在我的位置加载时,我都会得到一个空错误: com.example.wakelicious.MYPROJECTNAME.MapsActivity.SetupMapsActivity.java:71上的java.lang.NullPointerException 以下是我的地图活动: package com.example.wakelicious.MYPROJECTNAME; i

我最近开始使用Android Studio,我只是从基础开始。 我尝试加载一个谷歌地图页面,它工作正常。但是,每当我尝试在我的位置加载时,我都会得到一个空错误: com.example.wakelicious.MYPROJECTNAME.MapsActivity.SetupMapsActivity.java:71上的java.lang.NullPointerException

以下是我的地图活动:

package com.example.wakelicious.MYPROJECTNAME;

import com.example.wakelicious.MYPROJECTNAME.util.MyCurrentLocationListener;
import com.example.wakelicious.MYPROJECTNAME.util.SystemUiHider;

import android.content.Context;
import android.provider.SyncStateContract;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.view.Window;
import android.view.View;
import android.view.WindowManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.LocationSource;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity {
private static final boolean AUTO_HIDE = true;
private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
private static final boolean TOGGLE_ON_CLICK = true;
private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION;

private SystemUiHider mSystemUiHider;
private GoogleMap mMap; // Might be null if Google Play services APK is not available.
private TextView latituteField;
private TextView longitudeField;
private LocationManager locationManager;
private String provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_maps);
    setUpMapIfNeeded();
}

@Override
protected void onResume() {
    super.onResume();
    setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
    if (mMap == null) {
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
        if (mMap != null) {
            setUpMap();
        }
    }
}
private void setUpMap() {
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_LOW);
    provider = locationManager.getBestProvider(criteria, true);

    Location location = locationManager.getLastKnownLocation(provider);
    int lat = (int) (location.getLatitude());

    latituteField = (TextView) findViewById(R.id.TextView02);
    latituteField.setText(String.valueOf(lat));
    mMap.setMyLocationEnabled(true);
            CameraPosition myPosition = new CameraPosition.Builder()
            .target(new LatLng(51.5736359, 5.0386894)).zoom(13).build();
    mMap.animateCamera(
            CameraUpdateFactory.newCameraPosition(myPosition));
    mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.tilburg)).position(new LatLng(51.5736359, 5.0386894)).title("Tilburg"));
}

}
在我的清单中,我添加了以下内容:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
我真的不知道出了什么问题。我打开了手机上的GPS,甚至在我用我的位置打开应用程序中的谷歌地图后,我得到了一个蓝色的球体,这是我最后知道的位置,但不知何故,我无法从那个位置获得信息


有人知道我哪里做错了什么吗?

由于您的位置还没有被查询,所以您得到了空值。正如方法名所示,getLastKnownLocation检索最后一个已知位置。启用GPS是不够的,您需要先查询您的位置

如果该位置尚未出现,则要执行的操作是获取该位置:

public class MainActivity extends Activity implements LocationListener {

    private LocationManager mLocManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mLocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_LOW);
        String provider = mLocManager.getBestProvider(criteria, true);

        Location location = mLocManager.getLastKnownLocation(provider);

        if (location == null) {
            mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, );
        } else {
            setLat(location);
        }
    }

    private void setLat(Location location) {
        TextView latituteField = (TextView) findViewById(R.id.TextView02);
        latituteField.setText(String.valueOf(location.getLatitude()));
    }

    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            setLat(location);
            mLocManager.removeUpdates(this);
        }
    }

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {}

    @Override
    public void onProviderEnabled(String s) {}

    @Override
    public void onProviderDisabled(String s) {}

}

我也面临同样的问题。我改变了我的标准,我的问题得到了解决

标准.setAccuracyCriteria.Accurance\u FINE

或标准。setAccuracyCriteria.Accurance\u高