1

我有一个尝试创建数据库的 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): 致命异常: main 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): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java :795) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 09-22 21:19:18.386: E/AndroidRuntime (21881): 在 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): 在 com.fishingbuddy.logic.FishingManager.(FishingManager. java:26) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 java.lang.Class.newInstanceImpl(Native Method) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 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 更多在 android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 com.fishingbuddy.logic.FishingManager.(FishingManager.java:26) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 java.lang.Class.newInstanceImpl(Native Method) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 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 更多在 android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 com.fishingbuddy.logic.FishingManager.(FishingManager.java:26) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 java.lang.Class.newInstanceImpl(Native Method) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 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 更多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 更多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 更多在 com.fishingbuddy.logic.FishingManager.(FishingManager.java:26) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 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): at 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 更多在 com.fishingbuddy.logic.FishingManager.(FishingManager.java:26) 09-22 21:19:18.386: E/AndroidRuntime(21881): 在 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): at 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 更多19:18.386: E/AndroidRuntime(21881): 在 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 更多19:18.386: E/AndroidRuntime(21881): 在 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 更多E/AndroidRuntime(21881): 在 android.app.LoadedApk.makeApplication(LoadedApk.java:499) 09-22 21:19:18.386: E/AndroidRuntime(21881): ... 11 更多E/AndroidRuntime(21881): 在 android.app.LoadedApk.makeApplication(LoadedApk.java:499) 09-22 21:19:18.386: E/AndroidRuntime(21881): ... 11 更多

我正在使用应用程序,因为我正在为我的 FishingManager 使用单例模式。这一切都很好,直到我开始最后一部分,将我所有的数据保存到 SQLite 数据库中。

提前致谢

4

2 回答 2

1

当我从活动中调用它时:

它将与SuperNotCalledException.

从 Android.App.Application 完成时,它会失败

即使你在这里删除了这两行代码,它也会崩溃,并带有SuperNotCalledException.

super.onCreate()在做很多其他事情之前,onCreate()请先调用Activity(或)。Application

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

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

于 2013-09-22T19:42:45.420 回答
0

您可能需要在清单文件中声明一个内容提供程序,如本示例中给出的

于 2013-09-22T19:42:56.093 回答