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