从Android.App.Application创建Sqlitedb

时间:2013-09-22 19:39:05

标签: android sqlite

我有一个试图创建数据库的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数据库。

提前致谢

2 个答案:

答案 0 :(得分:1)

  

当我从某个活动中调用它时:

它会因SuperNotCalledException而崩溃。

  

从Android.App.Application完成后,它失败

即使你在这里删除了两行代码,它也会因SuperNotCalledException而崩溃。

请在super.onCreate()(或onCreate()Activity之前致电Application,然后再做其他任何事情。

  

我正在使用一个应用程序,因为我正在使用我的FishingManager的单例模式。

您不需要Application子类来拥有单个SQLiteOpenHelper。你只需要一个在第一次使用时懒惰初始化的单SQLiteOpenHelper

答案 1 :(得分:0)

您可能需要在清单文件中声明内容提供程序,如此example

中所示