Я создаю приложение с картами Google и радиусом окружности по центру местоположения пользователя. Я хочу, чтобы пользователь выбрал нужный радиус круга с помощью счетчика (радиус 1-10 км). Но когда я использую значение из моего счетчика, радиус-круг не появляется.
Для местоположения я могу получить синюю точку, показывающую мой внешний вид: map.setMyLocationEnabled (true); и я могу вручную ввести местоположение для карты, чтобы увеличить. Но когда я пытаюсь увеличить масштаб и установить центр круга на месте устройства, я получаю ошибку nullpointerexception. Ниже мой код для местоположения, и тост как раз для меня, чтобы увидеть, что я получаю фактическое местоположение.
private void getDeviceLocation() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
return;
}
Task<Location> task = mFusedLocationClient.getLastLocation();
task.addOnSuccessListener(MainActivity.this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
currentLocation = location;
Toast.makeText(MainActivity.this, "Current Position " + currentLocation.getLongitude(), Toast.LENGTH_LONG).show(); //Just to make sure we have a value
SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map2);
supportMapFragment.getMapAsync(MainActivity.this);
}
}
});
}
Затем я использую userPosition для карты, чтобы увеличить масштаб и установить центр круга
public void onMapReady(GoogleMap map) {
LatLng userPosition = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
mGoogleMap = map;
map.setMyLocationEnabled(true);
map.animateCamera(CameraUpdateFactory.newLatLngZoom(userPosition, 10f));
map.addCircle(new CircleOptions()
.center(userPosition)
.radius(mapRadius)
.strokeColor(0x330073FF)
.fillColor(0x330073FF)
.strokeWidth(2));
map.getUiSettings().setZoomControlsEnabled(true);
map.getUiSettings().setMyLocationButtonEnabled(true);
}
Но здесь я получаю сообщение об ошибке в строке userPosition: java .lang.NullPointerException: попытка вызвать виртуальный метод 'double android .location.Location.getLatitude ()' для ссылки на пустой объект в com .example.test.MainActivity.onMapReady (MainActivity. java: 362).
Я получил код из учебника, и он, похоже, работает для них, и перепробовал много разных учебников, а также немного другой код, поэтому не уверен, что я делаю не так. Я пробовал искать и знаю, что у других были похожие проблемы, но до сих пор не получил его на работу
Что касается радиуса, он отлично работает, когда я задаю местоположение вручную и пишу. Он хорошо работает, если я сам пишу радиус в метрах. Но если я попытаюсь использовать мой счетчик и значение mapRadius, радиус-круг вообще не будет отображаться при запуске эмулятора. Это код в onCreate
spinnerRadius = findViewById(R.id.spinner_radius);
ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter.createFromResource(this,
R.array.spinner_radius_option, android.R.layout.simple_spinner_item);
spinnerRadius.setAdapter(spinnerAdapter);
spinnerRadius.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mapRadiusInput = parent.getItemAtPosition(position).toString();
mapRadius = Double.parseDouble(mapRadiusInput)*1000; //converting to meters
Toast.makeText(MainActivity.this, ""+mapRadius, Toast.LENGTH_LONG).show();
}
Я новичок в программировании и android, и я потратил немало времени на решение этих двух проблем, и меня это не удивит, если это легко решить. Любая помощь или указатели будут с благодарностью.