Я создал таймер в службе, поэтому я получаю сообщение об ошибке, как решить эту проблему в Android - PullRequest
0 голосов
/ 11 мая 2011

Я создал один сервис, а также добавил его в манифест. Когда я использую таймер для периодического вызова этой услуги, а в таймере я использую диспетчер местоположения, чтобы получить местоположение пользователя Contin Но есть такая ошибка:

05-11 11: 57: 17.574: ОШИБКА / AndroidRuntime (3305): java.lang.RuntimeException: не может создать обработчик внутри потока, который имеет не вызывается Looper.prepare ()

Скажите, где проблема в моем коде.

код здесь

package com.collabera.labs.sai;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class SimpleService extends Service {
    Timer mytimer;

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    Toast.makeText(this,"Service created ...", Toast.LENGTH_LONG).show();
    mytimer = new Timer();
    mytimer.schedule(new TimerTask() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            //getdata();
            LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            LocationListener mlocListener = new MyLocationListener();
            mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
                    mlocListener);

        }
    },0,1000);

}

@Override
public void onDestroy() {
    super.onDestroy();
    Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_LONG).show();
}
public void getdata()
{

}
public class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location loc) {
        loc.getLatitude();
        loc.getLongitude();
        String Text = "My current location is: " + "Latitude = "
                + loc.getLatitude() + "Longitude = " + loc.getLongitude();
        /*Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT)
                .show();*/
        Log.d("TAG", "Starting..");
    }

    @Override
    public void onProviderDisabled(String provider) {
        /*Toast.makeText(getApplicationContext(), "Gps Disabled",
                Toast.LENGTH_SHORT).show();*/
    }

    @Override
    public void onProviderEnabled(String provider) {
        /*Toast.makeText(getApplicationContext(), "Gps Enabled",
                Toast.LENGTH_SHORT).show();*/
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
}/* End of Class MyLocationListener */
}

1 Ответ

0 голосов
/ 11 мая 2011
Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_LONG).show();

Вы не можете изменять пользовательский интерфейс из не-пользовательского потока.Службы никогда не выполняются в потоке пользовательского интерфейса.Запишите это вместо того, чтобы делать тост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...