1

我创建了一个带有服务的程序 - 服务是“START_STICKY”。因此,当我关闭程序时(我使用 Advanced Task Killer 来杀死程序),服务会自动重新启动,但这会出现问题,因为我在尝试调用时遇到错误:

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

我创建了一个类来处理上下文,如果它不为空,它将返回我的活动上下文,或者如果活动的上下文为空,我创建一个假的 - 并且活动的上下文为空,所以使用假的,我怀疑这个可能是问题,但不知道。在我的活动中,我有一个构造函数,它向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

任何帮助是极大的赞赏!- 我是android开发的初学者,所以请把它拼出来。

4

1 回答 1

1

Application 类是 Android 框架的一部分,您不能只使用构造函数等来创建它。使用应用程序的应用程序对象,而不是使用“假”对象

于 2010-11-18T21:02:19.623 回答