исключение 'java.lang.NullPointerException'.Невозможно оценить android.os.Bundle.toString () 'после попытки приложения на другом мобильном телефоне - PullRequest
0 голосов
/ 21 сентября 2018

ЦЕЛЬ: создать и запустить приложение, которое я успешно протестировал на Android 4.2.2 (JellyBean, API-уровень 17) на Android 7.0 (Nougat, API-уровень 24).

ПРОБЛЕМА: при запуске отладки или при запуске приложения появляется сообщение «приложение останавливается».Я не совсем понял, в чем проблема (также, если мне кажется, что проблема связана с обработкой разрешений).То, что я нашел ниже:

отладка

Method threw 'java.lang.NullPointerException' exception. Cannot evaluate android.os.Bundle.toString()

logcat

09-21 09:56:32.793 15606-15606/com.example.rage.lamapp E/art: The String#value field is not present on Android versions >= 6.0

MapsActivity (не полный код, чтобы сохранить чистоту)

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {

public static GoogleMap mMap;
boolean mRequestingLocationUpdates = true;

private static int INTERVAL_DURATION = 5000; //5 sec
private static int SIGNAL_AREA_UPDATE_INTERVAL = 1;
public static int ACTIVE_TECHNOLOGY = -1;
private static int WIRELESS_TECHNOLOGY = -1; // 0 wifi, 1 umts, 2 lte
private final static int MY_PERMISSION_FINE_LOCATION = 101;
private final static int MY_PERMISSION_COARSE_LOCATION = 102;
private final static int REQUEST_CHECK_SETTINGS = 1024;
private final static int UPDATE_SEEK_BAR_MIN_VALUE = 5;


private FusedLocationProviderClient mFusedLocationClient;
private LocationCallback mLocationCallback;
private LocationRequest mLocationRequest;


private LocationManager locationManager;
private ConnectivityManager connectivityManager;
private NetworkInfo wifiCheck;
private TelephonyManager telephonyManager;
private WifiManager wifiManager;
private BroadcastReceiver wifiScanReceiver;
private List<ScanResult> results;

private int localMaxSignalStrength = 0;

private final static HashMap<Integer, String> RSSIcolorHmap = new HashMap();

private  SignalAreaDatabase db;

private final LocationUpdate locationUpdate= new LocationUpdate(MapsActivity.this);





@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);

    db = SignalAreaDatabase.getDatabase(this);


    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);

    // Check if location service is enabled
   // checkGPSisEnabled();

    // Set the toolbar
    myToolbar.setTitle("RSSI Map");
    myToolbar.setSubtitle("A Connectivity Map Builder");
    setSupportActionBar(myToolbar);

    // If location permission is granted initialize Map
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

        mapSync();

    } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_FINE_LOCATION);
        }
    }

}


 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case MY_PERMISSION_FINE_LOCATION:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                        mMap.setMyLocationEnabled(true);


                    }
                } else {
                    Toast.makeText(getApplicationContext(), "This app requires location permission to be granted", Toast.LENGTH_SHORT).show();
                    finish();
                }
                break;
            case MY_PERMISSION_COARSE_LOCATION:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                        mMap.setMyLocationEnabled(true);
                    }
                } else {
                    Toast.makeText(getApplicationContext(), "This app requires location permission to be granted", Toast.LENGTH_SHORT).show();
                    finish();
                }

                break;


        }
    }

/* other code */

1 Ответ

0 голосов
/ 21 сентября 2018
String[] permissionsRequired = new String[]{Manifest.permission.ACCESS_FINE_LOCATION};

if(ActivityCompat.checkSelfPermission(this, permissionsRequired[0]) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,permissionsRequired,PERMISSION_CALLBACK_CONSTANT);
        }
else if((ActivityCompat.checkSelfPermission(this, permissionsRequired[0]) == PackageManager.PERMISSION_GRANTED){ mapSync();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...