2010-11-18 5 views
1

Я создал программу с сервисом - услуга «START_STICKY». Поэтому, когда я закрываю программу (я использую Advanced Task Killer, чтобы убить программы) перезапуск службы автоматически, но это представляет собой проблему, потому что я получаю сообщение об ошибке при попытке вызова:Android SQLite ContextWrapper.openOrCreateDatabase() nullpointer?

ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) (see stacktrace below). 

Я создал класс для обработки контекста, который вернет контекст моей активности, если он не является нулевым, или поддельный, который я создал, если контекст активности имеет значение null - и контекст активности имеет значение null, поэтому используется поддельный, я подозреваю, что это может быть проблемой , но понятия не имею. В моей деятельности у меня есть конструктор, который дает ссылку на него сам по классу contexthandling, но, похоже, действие не создается (не раньше, чем служба запускается как минимум), когда система перезапускает мою службу.

Существует, конечно, проблема, когда программа запускается нормально, сервис начинается нормально; поэтому я заподозрить поддельный контекст, я создал ее следующим образом (и это упоминается в манифесте приложения тег с android:name=FakeContext):

public class FakeContext extends android.app.Application 
{ 
    private static FakeContext m_instance = null; 

    public FakeContext() 
    { 
    } 

    public static synchronized Context getContext() 
    { 
     if(m_instance == null) 
     { 
     m_instance = new FakeContext(); 
     } 

     return m_instance; 
    } 
} 

StackTrace:

11-18 19:12:14.048: ERROR/AndroidRuntime(15655): FATAL EXCEPTION: main 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): java.lang.RuntimeException: Unable to create service sdo.GeoTracker.Services.DataService: java.lang.NullPointerException 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread.handleCreateService(ActivityThread.java:3140) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread.access$3300(ActivityThread.java:135) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2202) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.os.Looper.loop(Looper.java:144) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread.main(ActivityThread.java:4937) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at java.lang.reflect.Method.invokeNative(Native Method) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at java.lang.reflect.Method.invoke(Method.java:521) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at dalvik.system.NativeStart.main(Native Method) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): Caused by: java.lang.NullPointerException 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at sdo.GeoTracker.DataAccess.SqlAdapter.<init>(SqlAdapter.java:51) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at sdo.GeoTracker.DataAccess.SqlAdapter.getInstance(SqlAdapter.java:61) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at sdo.GeoTracker.Services.DataService.startService(DataService.java:65) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at sdo.GeoTracker.Services.DataService.onCreate(DataService.java:40) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread.handleCreateService(ActivityThread.java:3125) 
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): ... 10 more 

Любая помощь очень ценится ! - Я начинающий разработчик Android, поэтому, пожалуйста, напишите его.

+0

Почему у вас есть поддельный контекст? – apps

+0

привет, мне нужно было кормить sqlliteopenhelper контекстом. как это: частный статический класс OpenHelper расширяет SQLiteOpenHelper \t { \t \t общественного OpenHelper (контекст Context) \t \t {\t \t \t \t \t \t \t \t супер (контекст, DATABASE_NAME, нуль, DATABASE_VERSION); \t \t} ..snip .. – SimonDK

+0

http://stackoverflow.com/questions/4177731/android-how-to-call-method-from-another-class-without-passing-context/4177776#4177776 – apps

ответ

1

Класс Application является частью платформы Android, вы не можете просто создать его с помощью конструктора и так далее. Используйте объект приложения вашего приложения, вместо того, чтобы использовать «поддельный»

+0

Здравствуйте, но как я могу захватить объект приложения? Я попытался сохранить статическую версию моего класса активности (у меня нет одного расширяющегося приложения), а класс активности не был создан до запуска службы. – SimonDK

+0

передать это приложение, это все еще Контекст – apps