[英]GoogleMaps is null after onactivityresult in android
我在 onActivityResult() 中收到另一個活動的結果,並試圖在 map 上放置一個標記。 但它讓我跟隨 RuntimeException:
java.lang.RuntimeException: Unable to resume activity {My Package Name/My Package Name.MapsActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=1, data=Intent { (has extras) }} to activity {My Package Name} java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.moveCamera(com.google.android.gms.maps.CameraUpdate)' on a null object reference
這是我的 onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
if (requestCode == HOSPITAL_LOCATION_RESULT_CODE) {
String hospitalName = data.getStringExtra("HospitalName");
hospitalLocation = data.getExtras().getParcelable("HospitalLatLng");
hospitalCity = data.getStringExtra("HospitalCity");
hospitalAddressEditText.setText(hospitalName);
hospitalAddressEditText.setTextColor(Color.parseColor("#212121"));
//Exception Thrown Here
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(hospitalLocation, 1));
displayRoutes();
if (currMarker != null)
currMarker.remove();
markerDrop = mMap.addMarker(new MarkerOptions().position(hospitalLocation));
} else {
Toast.makeText(MapsActivity.this, "Error Displaying Selected Location", Toast.LENGTH_SHORT).show();
}
}
}
在調用 onActivityResult 之前, mMap
(GoogleMaps 對象)似乎沒有同步。 但不確定。 你們能幫幫我嗎?
編輯:這是我的 onCreate():
private static final String TAG = "MapsActivity";
private GoogleMap mMap;
private FusedLocationProviderClient fusedLocationProviderClient;
private Location lastKnownLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
verifyUserIsLoggedIn();
mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
Places.initialize(getApplicationContext(), "AIzaSyDTyvJynXqJrLBN8BIFk");
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
if (mapFragment != null) {
mapFragment.getMapAsync(this);
}
hospitalPoint.setOnClickListener(v -> {
if(lastKnownLocation != null) {
//This is where I'm calling another activity for result, and processing the result in the onactivityresult function
Intent pickupPointClickIntent = new Intent(MapsActivity.this, HospitalSearch.class);
pickupPointClickIntent.putExtra("PickupLatLng", lastKnownLocation);
startActivityForResult(pickupPointClickIntent, HOSPITAL_LOCATION_RESULT_CODE);
} else {
Toast.makeText(MapsActivity.this, "Error Fetching Your Location! Please turn on the Location in your phone", Toast.LENGTH_SHORT).show();
}
});
}
我在 onMapReady() 中沒有做太多事情:
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
這是 getCurrentDeviceLocation():
private void getCurrentDeviceLocation() {
try {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Task<Location> locationResult = fusedLocationProviderClient.getLastLocation();
locationResult.addOnCompleteListener(this, task -> {
if (task.isSuccessful()) {
lastKnownLocation = task.getResult();
if (lastKnownLocation != null) {
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(lastKnownLocation.getLatitude(),
lastKnownLocation.getLongitude()), CURRENT_LOCATION_ZOOM));
if(currMarker == null)
currMarker = mMap.addMarker(new MarkerOptions().title("Current Location")
.icon(getLocationMarkerBitmap())
.position(new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude())));
locationSelectionLayout.setVisibility(View.VISIBLE);
} else {
Log.e(TAG, "Error Fetching Current Location");
Toast.makeText(MapsActivity.this, "Current Location Couldn't be fetched", Toast.LENGTH_SHORT).show();
}
} else {
Log.e(TAG, "Error Fetching Current Location");
Toast.makeText(MapsActivity.this, "Current Location Couldn't be fetched", Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(MapsActivity.this, "Location Permission Denied", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Log.e("Exception: %s", e.getMessage(), e);
}
}
您必須在使用前在onMapReady()中初始化nMap
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.