java.lang.RuntimeException: Невозможно создать обработчик внутри потока, который не называется Looper.prepare()Android Исключение в перспективе метода в MainTask
Я получил услугу, призывающую к run
метод мой MainTask
каждые 15 секунд (по причинам тестирования) timer.scheduleAtFixedRate(new MainTask(), 0, 15000);
(названный в onStartCommand
код в методе запуска выглядит так:.
public void run() {
Log.v("MainTask", "run() Called");
GpsHelper gpsHelper = new GpsHelper(getApplicationContext(), this); // This is causing the error - commented out => no error
// Doing some independent webrequests here!
}
Класс GpsHelper выглядит так (он имеет некоторые если заявления - потому что он также используется вне службы в Mainactivity
:
public GpsHelper(Context context, LocationReceiver locationReceiver) {
this.context = context;
this.locationReceiver = locationReceiver;
mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (locationReceiver instanceof Runnable) {
isRunnable = true;
}
run();
}
/**
* Getting the Location, handling permission, requesting location updates if time is greater than 2 minutes
*/
public void getLocation() {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED && !isRunnable) {
StaticHelpers.askForFineLocationPermission(context);
} else {
if (isRunnable && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.v("GpsHelper", "Runnable can't get position - check permissions!");
} else {
Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
// If time not greater than 2 minutes
// TODO: Move to resources
if (location != null && location.getTime() > Calendar.getInstance().getTimeInMillis() - 2 * 60 * 1000) {
Log.v("GpsHelper", "Using existing location");
locationReceiver.onLocationAvailable(location);
} else {
Log.v("GpsHelper", "No Position Available => Requesting Location Updates");
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
if (!isRunnable && !mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
showSettingsDialog();
}
}
}
}
После получения позиции этот метод называется: mLocationManager.removeUpdates(this);
Когда возникает эта ошибка? Четвертый раз подряд набирается так называемый
В чем состоит возможный ответ? Ответ должен помочь мне исправить эту ошибку, не изменяя логического поведения, и не должен запускаться на нитке ui!
Log.v («MainTask», «run() Called»); GpsHelper gpsHelper = новый GpsHelper (getApplicationContext(), this); Добавьте этот код внутри обработчика или runOnUiThread() – Kamal