/////////////////////Logcat
06-10 16:18:29.638 5991-5991/com.example.bencall E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.bencall, PID: 5991 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bencall/com.example.bencall.MapsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void net.daum.mf.map.api.MapView.setCurrentLocationEventListener(net.daum.mf.map.api.MapView$CurrentLocationEventListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void net.daum.mf.map.api.MapView.setCurrentLocationEventListener(net.daum.mf.map.api.MapView$CurrentLocationEventListener)' on a null object reference at com.example.bencall.MapsActivity.onCreate(MapsActivity.java:44) at android.app.Activity.performCreate(Activity.java:5937) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////MapsActivity.java//////////////////////////////////////////////////////////
public class MapsActivity extends AppCompatActivity implements MapView.CurrentLocationEventListener, MapReverseGeoCoder.ReverseGeoCodingResultListener {
private static final String LOG_TAG = "MainActivity";
private MapView mMapView;
private static final int GPS_ENABLE_REQUEST_CODE = 2001;
private static final int PERMISSIONS_REQUEST_CODE = 100;
String[] REQUIRED_PERMISSIONS = {Manifest.permission.ACCESS_FINE_LOCATION};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.map_view);
//mMapView.setDaumMapApiKey(MapApiConst.DAUM_MAPS_ANDROID_APP_API_KEY);
mMapView.setCurrentLocationEventListener(this);
if (!checkLocationServicesStatus()) {
showDialogForLocationServiceSetting();
}else {
checkRunTimePermission();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOff);
mMapView.setShowCurrentLocationMarker(false);
}
@Override
public void onCurrentLocationUpdate(MapView mapView, MapPoint currentLocation, float accuracyInMeters) {
MapPoint.GeoCoordinate mapPointGeo = currentLocation.getMapPointGeoCoord();
Log.i(LOG_TAG, String.format("MapView onCurrentLocationUpdate (%f,%f) accuracy (%f)", mapPointGeo.latitude, mapPointGeo.longitude, accuracyInMeters));
}
@Override
public void onCurrentLocationDeviceHeadingUpdate(MapView mapView, float v) {
}
@Override
public void onCurrentLocationUpdateFailed(MapView mapView) {
}
@Override
public void onCurrentLocationUpdateCancelled(MapView mapView) {
}
@Override
public void onReverseGeoCoderFoundAddress(MapReverseGeoCoder mapReverseGeoCoder, String s) {
mapReverseGeoCoder.toString();
onFinishReverseGeoCoding(s);
}
@Override
public void onReverseGeoCoderFailedToFindAddress(MapReverseGeoCoder mapReverseGeoCoder) {
onFinishReverseGeoCoding("Fail");
}
private void onFinishReverseGeoCoding(String result) {
// Toast.makeText(LocationDemoActivity.this, "Reverse Geo-coding : " + result, Toast.LENGTH_SHORT).show(); }
/*
* Method of receiving the result of a permission request using ActivityCompat.requestPermissions.
*/
@Override
public void onRequestPermissionsResult(int permsRequestCode,
@NonNull String[] permissions,
@NonNull int[] grandResults) {
if ( permsRequestCode == PERMISSIONS_REQUEST_CODE && grandResults.length == REQUIRED_PERMISSIONS.length) {
// If the request code is PERMISSIONS_REQUEST_CODE and the number of permissions requested is received,
boolean check_result = true;
// Check that you have allowed all permissions.
for (int result : grandResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
check_result = false;
break;
}
}
if ( check_result ) {
Log.d("@@@", "start");
//Can get location values
mMapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOnWithHeading);
}
else {
// If there is a permission that you rejected, explain why you cannot use the app and exit the app.There are two cases.
if (ActivityCompat.shouldShowRequestPermissionRationale(this, REQUIRED_PERMISSIONS[0])) {
Toast.makeText(MapsActivity.this), "Permission denied. Please run the app again to allow permission.", Toast.LENGTH_LONG).show();
finish();
}else {
Toast.makeText(MapsActivity.this), "Permission denied. Permission must be allowed in Settings (App Properties). ", ", Toast.LENGTH_LONG).show();
}
}
}
}
void checkRunTimePermission(){
//Runtime Permission Processing
// 1. Check if you have a location permission.
int hasFineLocationPermission = ContextCompat.checkSelfPermission(MapsActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION);
if (hasFineLocationPermission == PackageManager.PERMISSION_GRANTED ) {
// 2. If you already have a permission,
// (For Android versions 6.0 and earlier, it is recognized as already permitted because no runtime permission is required.)
// 3. Location values can be imported
mMapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOnWithHeading);
} else { //2. Permission request is required if permission request has never been allowed. There are two cases (3-1, 4-1).
// 3-1. If the user has refused permission,
if (ActivityCompat.shouldShowRequestPermissionRationale(MapsActivity.this, REQUIRED_PERMISSIONS[0])) {
// 3-2. Before proceeding with the request, it is necessary for the user to explain why permission is required.
Toast.makeText (MapsActivity.this, "You need location access to run this app," Toast.LENGTH_LONG).show();
// 3-3. Make a permission request to the user store. The result of the request is received from the onRequestPermissionResult.
ActivityCompat.requestPermissions(MapsActivity.this, REQUIRED_PERMISSIONS,
PERMISSIONS_REQUEST_CODE);
} } else {
// 4-1. If the user has never denied the permission, the permission request is made immediately.
// The result of the request is received from the onRequestPermissionResult.
ActivityCompat.requestPermissions(MapsActivity.this, REQUIRED_PERMISSIONS,
PERMISSIONS_REQUEST_CODE);
}
}
}
//From here on, methods for GPS activation
private void showDialogForLocationServiceSetting() {
AlertDialog.Builder builder = new AlertDialog.Builder(MapsActivity.this);
builder.setTitle ("Disable Location Service");
builder.setMessage ("The app requires a location service to use it).\n"
+ "Do you want to modify the location settings?");
builder.setCancelable(true);
builder.setPositiveButton("setup", newDialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Intent callGPSSettingIntent
= = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(callGPSSettingIntent, GPS_ENABLE_REQUEST_CODE);
}
});
builder.setNegativeButton("cancel", newDialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.create().show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case GPS_ENABLE_REQUEST_CODE:
//Check if the user has enabled GPS
if (checkLocationServicesStatus()) {
if (checkLocationServicesStatus()) {
Log.d ("@@@", "onActivityResult : GPS enabled");
checkRunTimePermission();
return;
}
}
break;
}
}
public boolean checkLocationServicesStatus() {
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|| || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////activity_maps.xml//////////////////////////////////////////////////////////
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="194dp"
android:layout_weight="8"
android:orientation="vertical">
<EditText
android:id="@+id/start"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:hint="origin" />
<EditText
android:id="@+id/goal"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:layout_below="@+id/start"
android:hint="Destination" />
<Button
android:id="@+id/search1"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/start"
android:background="#f8dd43"
android:text="Search" />
<Button
android:id="@+id/search2"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_below="@+id/search1"
android:layout_marginTop="10dp"
android:layout_toRightOf="@+id/goal"
android:background="#f8dd43"
android:text="Search" />
<Button
android:id="@+id/call"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@+id/goal"
android:layout_marginTop="5dp"
android:background="#f8dd43"
android:text="call" />
<Button
android:id="@+id/cancel"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@+id/goal"
android:layout_toRightOf="@+id/call"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:background="#f8dd43"
android:text="Cancel" />
</RelativeLayout>
<net.daum.mf.map.api.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="550dp" />
Error caused by net.daum.mf.map.api.mapView object is null.
Is the object properly written in xml?
Check if the import is done properly.
916 When building Fast API+Uvicorn environment with PyInstaller, console=False results in an error
618 Uncaught (inpromise) Error on Electron: An object could not be cloned
613 GDB gets version error when attempting to debug with the Presense SDK (IDE)
573 rails db:create error: Could not find mysql2-0.5.4 in any of the sources
© 2024 OneMinuteCode. All rights reserved.