2010-11-18 13 views
1

プログラムを作成しました。サービスは「START_STICKY」です。私は、サービスが自動的に再起動されて(私はプログラムを殺すために、高度なタスクキラーを使用しています)プログラムを閉じて、私はエラーを取得するので、これは問題を提示したときにそうするとき呼び出そう: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; 
    } 
} 

スタックトレース:

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 

すべてのヘルプは大歓迎です! - 私はアンドロイド開発の初心者ですので、覚えておいてください。

+0

なぜ偽のコンテキストがありますか? – apps

+0

こんにちは、私はsqlliteopenhelperに文脈を与える必要がありました。このように:プライベート静的クラスOpenHelper SQLiteOpenHelper \t {\t \t公共OpenHelper(コンテキスト・コンテキスト) \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