gpt4 book ai didi

java - map 应用程序在打开时崩溃

转载 作者:行者123 更新时间:2023-12-01 10:51:21 25 4
gpt4 key购买 nike

这里 map 在开始时崩溃;我的应用程序目标是在应用程序启动时缩放到当前位置。我尝试过的代码如下

public class MainActivity extends FragmentActivity implements OnMapReadyCallback {

GoogleMap googleMap;

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

SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.frg_map);
googleMap = supportMapFragment.getMap();
googleMap.setMyLocationEnabled(true);

supportMapFragment.getMapAsync(this);
}

public void onMapReady(GoogleMap googleMap) {
googleMap.setMyLocationEnabled(true);

Criteria criteria = new Criteria();
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
String mMapProvider = locationManager.getBestProvider(criteria, true);

if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location = locationManager.getLastKnownLocation(mMapProvider);
if (location != null){
onLcatonChanged(location);
}
locationManager.requestLocationUpdates(mMapProvider, 20000, 0, (LocationListener) this);

}

private void onLcatonChanged(Location location) {

double latitude = location.getLatitude();
double longitude = location.getLongitude();
LatLng latLng = new LatLng(latitude, longitude);
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
}}

下面给出了我的错误

Process: com.example.rahul.maptask, PID: 21986 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rahul.maptask/com.example.rahul.maptask.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.SupportMapFragment.getMap()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) at android.app.ActivityThread.access$800(ActivityThread.java:155) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5343) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372)

最佳答案

问题是因为 Activity 开始后 map 尚未准备好。您必须使用 api 中的 getMapAsync 方法:在你的 onCreate 中:

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

您的 Activity 应如下声明:

public class MainActivity extends FragmentActivity
implements OnMapReadyCallback {
...
}

并且您必须实现回调,它以与 onCreate 中相同的方式使用 map :

@Override
public void onMapReady(GoogleMap googleMap) {
googleMap.setMyLocationEnabled(true);

Criteria criteria = new Criteria();
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
String mMapProvider = locationManager.getBestProvider(criteria, true);

if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location = locationManager.getLastKnownLocation(mMapProvider);
if (location != null){
onLcatonChanged(location);
}
locationManager.requestLocationUpdates(mMapProvider, 20000, 0, (LocationListener) this);
}

关于java - map 应用程序在打开时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33869525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com