我有一个试图创建数据库的Android.App.Application。我正在使用SQLite db示例代码。如果我在Activity中使用它,它的效果很好。当我尝试在Android.App.Application中创建完全相同的东西时,它会崩溃。我不知道为什么。
当我从某个活动中调用它时:
public class Manager extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
fbdbhelper = new FishingBuddyOpenHelper(getApplicationContext());
db = fbdbhelper.getTbfw().getReadableDatabase();
}
创建了一个sqlite数据库(/data/data/com.fishingbuddy/databases /)
从Android.App.Application完成后,它失败了:
public class FishingManager extends Application{
public FishingManager() {
fbdbhelper = new FishingBuddyOpenHelper(getApplicationContext());
db = fbdbhelper.getTbfw().getReadableDatabase();
}
09-22 21:19:18.386:E / AndroidRuntime(21881):致命异常:主要 09-22 21:19:18.386:E / AndroidRuntime(21881):java.lang.RuntimeException:无法>实例化应用程序com.fishingbuddy.logic.FishingManager:java.lang.NullPointerException 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.app.LoadedApk.makeApplication(LoadedApk.java:504) 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.app.ActivityThread.handleBindApplication(ActivityThread.java:4550) 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.app.ActivityThread.access $ 1300(ActivityThread.java:153) 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1307) 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.os.Handler.dispatchMessage(Handler.java:99) 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.os.Looper.loop(Looper.java:137) 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.app.ActivityThread.main(ActivityThread.java:5227) 09-22 21:19:18.386:E / AndroidRuntime(21881):at java.lang.reflect.Method.invokeNative(Native Method) 09-22 21:19:18.386:E / AndroidRuntime(21881):at java.lang.reflect.Method.invoke(Method.java:511) 09-22 21:19:18.386:E / AndroidRuntime(21881):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:795) 09-22 21:19:18.386:E / AndroidRuntime(21881):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 09-22 21:19:18.386:E / AndroidRuntime(21881):at dalvik.system.NativeStart.main(Native Method) 09-22 21:19:18.386:E / AndroidRuntime(21881):引起:java.lang.NullPointerException 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109) 09-22 21:19:18.386:E / AndroidRuntime(21881):at com.fishingbuddy.logic.FishingManager。(FishingManager.java:26) 09-22 21:19:18.386:E / AndroidRuntime(21881):at java.lang.Class.newInstanceImpl(Native Method) 09-22 21:19:18.386:E / AndroidRuntime(21881):at java.lang.Class.newInstance(Class.java:1319) 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.app.Instrumentation.newApplication(Instrumentation.java:983) 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.app.Instrumentation.newApplication(Instrumentation.java:968) 09-22 21:19:18.386:E / AndroidRuntime(21881):在android.app.LoadedApk.makeApplication(LoadedApk.java:499) 09-22 21:19:18.386:E / AndroidRuntime(21881):... 11更多
我正在使用一个应用程序,因为我正在使用我的FishingManager的单例模式。这一切都很有效,直到我开始最后一部分,将我的所有数据保存到SQLite数据库。
提前致谢
答案 0 :(得分:1)
当我从某个活动中调用它时:
它会因SuperNotCalledException
而崩溃。
从Android.App.Application完成后,它失败
即使你在这里删除了两行代码,它也会因SuperNotCalledException
而崩溃。
请在super.onCreate()
(或onCreate()
)Activity
之前致电Application
,然后再做其他任何事情。
我正在使用一个应用程序,因为我正在使用我的FishingManager的单例模式。
您不需要Application
子类来拥有单个SQLiteOpenHelper
。你只需要一个在第一次使用时懒惰初始化的单SQLiteOpenHelper
。
答案 1 :(得分:0)
您可能需要在清单文件中声明内容提供程序,如此example
中所示