我已经创建了一个带有服务的程序 - 服务是“START_STICKY”。所以,当我关闭程序(我用的高级任务杀手,杀程序)的服务自动重新启动,但因为我得到一个错误这提出了一个问题,当试图拨打:Android SQLite ContextWrapper.openOrCreateDatabase()nullpointer?
ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) (see stacktrace below).
我创建了一个类来处理上下文,如果它不为null,它将返回我的Activity的上下文,或者如果活动的上下文为空,则创建一个假的,并且该活动的上下文为空,因此使用假的,我怀疑这可能是问题,但不知道。 在我的活动中,我有一个构造函数,它为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开发的初学者,所以请把它拼出来。
为什么你有假的背景? – apps 2010-11-18 21:00:47
你好,我需要为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 2010-11-18 21:02:43
http://stackoverflow.com/questions/4177731/android-how-to-call-method-from-another-class-without-passing-context/4177776#4177776 – apps 2010-11-18 21:05:25