Принудительное закрытие при запуске сервиса - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть активность, и я хочу, чтобы она обновлялась из службы.при попытке запустить службу я получаю сообщение об ошибке принудительного закрытия.

LOGCAT

12-13 15:26:24.574: E/AndroidRuntime(13741): FATAL EXCEPTION: main
12-13 15:26:24.574: E/AndroidRuntime(13741): java.lang.RuntimeException: Unable to instantiate service www.freshapp.com.wherewhen.html.SetTime: java.lang.NullPointerException
12-13 15:26:24.574: E/AndroidRuntime(13741):    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2005)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at android.app.ActivityThread.access$2500(ActivityThread.java:124)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1022)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at android.os.Looper.loop(Looper.java:123)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at android.app.ActivityThread.main(ActivityThread.java:3806)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at java.lang.reflect.Method.invokeNative(Native Method)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at java.lang.reflect.Method.invoke(Method.java:507)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at dalvik.system.NativeStart.main(Native Method)
12-13 15:26:24.574: E/AndroidRuntime(13741): Caused by: java.lang.NullPointerException
12-13 15:26:24.574: E/AndroidRuntime(13741):    at www.freshapp.com.wherewhen.html.SetTime.<init>(SetTime.java:21)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at java.lang.Class.newInstanceImpl(Native Method)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at java.lang.Class.newInstance(Class.java:1409)
12-13 15:26:24.574: E/AndroidRuntime(13741):    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2002)

SERVICE CLASS

public class SetTime extends Service {


private Handler hanl;
private Context context;
LayoutInflater inflater = (LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);
View name = inflater.inflate(R.id.editName, null);

View lon = inflater.inflate(R.id.editName, null);

View lat = inflater.inflate(R.id.editName, null);

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

@Override
public void onCreate(){

}

 @Override
  public int onStartCommand(Intent intent, int flags, int startId) {

     final LocationManager mlocManager = 
                (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        final LocationListener mlocListener = new LocationHelper();
      Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();

        final Runnable r = new Runnable(){
      public void run(){
            mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
                    mlocListener);

            ((TextView) lat).setText(""+ LocationHelper.getLatitude());
            ((TextView) lon).setText("" + LocationHelper.getLongitude());


             hanl.postDelayed(this, 1000);


             //String date = s.format(new Date());
                String mName = ((EditText) name).getText().toString();
                 String mLat = ((EditText) lat).getText().toString();
                 String mLon = ((EditText) lon).getText().toString();




        }
            };
            hanl.postDelayed(r, 1000);


      // If we get killed, after returning from here, restart
      return START_STICKY;
  }

}

ЛИНИЯ 21

LayoutInflater inflater = (LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);

1 Ответ

0 голосов
/ 14 декабря 2011

Вы пытаетесь создать LayoutInflater в статическом инициализаторе.Это не будет работать.Тактически, это не будет работать, потому что вы пытаетесь вызвать getSystemService() на context, что на данный момент составляет null.

Более того, Service не имеет смысла для LayoutInflater, поэтому вам следует удалить строку 21 и все, что на нее ссылается, например все виджеты EditText, которые вы не можете использовать.Или конвертируйте Service в Activity, поскольку Activity имеет пользовательский интерфейс, а Service - нет.

...