У меня проблема с моим приложением. Мое приложение на самом деле является сервисом. У меня есть Main extends Service, у него есть переменная Looper looper, чтобы получить обработчик HandlerThread. В функции onCreate
я инициализирую диспетчер местоположений, приемник местоположения и HandlerThread (который устанавливает его петлю в переменную looper), затем я пытаюсь использовать requestLocationUpdates
, передавая переменную looper как looper. Я получаю ошибкуСбой приложения для Android (looper = null)
09-22 17:30:24.069: E/AndroidRuntime(1414): Caused by: java.lang.IllegalArgumentException: looper==null
Должен ли я сделать что-нибудь еще для этого HandlerThread? Может быть, начать??
Я не вставляю код, так как он довольно длинный, и я не знаю соответствующей части, которая была бы подходящей для решения проблемы. Поэтому я хотел бы передать любой код, который вам может понадобиться (HandlerThread? Что-нибудь еще?)
Спасибо за любую помощь.
** EDIT * *
Хорошо OnCreate функция:
public void onCreate() {
super.onCreate();
Log.d("Service", "Service onCreate starts");
running = true;
lt = new LooperThread("GPSIntentLT");
serviceLocationM = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
serviceLocationL = new MyLocationListener();
requestUpdates(serviceLocationL);
Log.d("Service", "Service onCreate ends");
}
requestUpdates функция (так называемый выше, возникает ошибка):
private void requestUpdates(LocationListener listener)
{
Log.d("Service", "requestUpdates starts");
serviceLocationM.removeUpdates(listener);
flag = displayGpsStatus();
switch(flag)
{
case 0:
Log.d("Service", "No Location Provider");
break;
case 1:
Log.d("Service", "Network Provider");
serviceLocationM.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10, 25, listener, theLooper);
break;
case 2:
Log.d("Service", "GPS Provider");
serviceLocationM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 25, listener, theLooper);
break;
}
Log.d("Service", "requestUpdates ends");
}
И HandlerThread:
private class LooperThread extends HandlerThread{
public LooperThread(String name) {
super(name);
Log.d("Service", "LooperThread constructor starts");
theLooper = getLooper();
Log.d("Service", "LooperThread constructor ends");
}
@Override
public void run() {
super.run();
Log.d("Service", "LooperThread run called");
}
}
И в конце концов, LogCat для этого приложения:
09-22 18:21:47.997: D/Service(386): Service onCreate starts
09-22 18:21:47.997: D/Service(386): LooperThread constructor starts
09-22 18:21:48.007: D/Service(386): LooperThread constructor ends
Так он спустится на функции requestLocationUpdates, это происходит на 2.2 эмулятора, на 2.3.3 он разбивает весь эмулятор, убивая его процессы (?).
Вы должны хотя бы опубликовать, какой код вы можете использовать для классов, onCreate и threader. – Jems
@ Джемс добавил код. – Ziker
Почему вы расширяете HandlerThread? – pskink