Android崩溃-无法获取提供程序

Android崩溃-无法获取提供程序,android,Android,我被这个弄糊涂了。我一直在经历这场车祸。以前也有人问过类似的问题,但我没有犯同样的错误。这是我的舱单: 这是我的日志: 08-01 18:11:10.111: I/dalvikvm(1150): threadid=3: reacting to signal 3 08-01 18:11:10.141: I/dalvikvm(1150): Wrote stack traces to '/data/anr/traces.txt' 08-01 18:11:10.481: I/d

我被这个弄糊涂了。我一直在经历这场车祸。以前也有人问过类似的问题,但我没有犯同样的错误。这是我的舱单:

这是我的日志:

    08-01 18:11:10.111: I/dalvikvm(1150): threadid=3: reacting to signal 3
    08-01 18:11:10.141: I/dalvikvm(1150): Wrote stack traces to '/data/anr/traces.txt'
    08-01 18:11:10.481: I/dalvikvm(1150): threadid=3: reacting to signal 3
    08-01 18:11:10.694: I/dalvikvm(1150): Wrote stack traces to '/data/anr/traces.txt'
    08-01 18:11:11.951: I/Process(1150): Sending signal. PID: 1150 SIG: 9
    08-01 18:12:50.231: I/dalvikvm(1196): threadid=3: reacting to signal 3
    08-01 18:12:50.661: I/dalvikvm(1196): Wrote stack traces to '/data/anr/traces.txt'
    08-01 18:12:50.671: I/dalvikvm(1196): threadid=3: reacting to signal 3
    08-01 18:12:50.801: I/ActivityThread(1196): Pub                                 com.corsair.android.taskreminder.ReminderListProvider: com.corsair.android.taskreminder.ReminderListProvider
    08-01 18:12:50.833: D/ReminderProvider(1196): main oncreate called
    08-01 18:12:50.851: I/dalvikvm(1196): Wrote stack traces to '/data/anr/traces.txt'
    08-01 18:12:50.871: D/ReminderProvider(1196): inner oncreate called
    08-01 18:12:50.893: D/AndroidRuntime(1196): Shutting down VM
    08-01 18:12:50.893: W/dalvikvm(1196): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
    08-01 18:12:50.911: E/AndroidRuntime(1196): FATAL EXCEPTION: main
    08-01 18:12:50.911: E/AndroidRuntime(1196): java.lang.RuntimeException: Unable to get provider com.corsair.android.taskreminder.ReminderListProvider: java.lang.NullPointerException
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.app.ActivityThread.installProvider(ActivityThread.java:4240)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.app.ActivityThread.installContentProviders(ActivityThread.java:3992)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3946)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.app.ActivityThread.access$1300(ActivityThread.java:123)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1185)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.os.Handler.dispatchMessage(Handler.java:99)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.os.Looper.loop(Looper.java:137)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.app.ActivityThread.main(ActivityThread.java:4424)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at java.lang.reflect.Method.invokeNative(Native Method)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at java.lang.reflect.Method.invoke(Method.java:511)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at dalvik.system.NativeStart.main(Native Method)
    08-01 18:12:50.911: E/AndroidRuntime(1196): Caused by: java.lang.NullPointerException
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at com.corsair.android.taskreminder.ReminderListProvider$DatabaseHelper.onCreate(ReminderListProvider.java:75)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at com.corsair.android.taskreminder.ReminderListProvider.onCreate(ReminderListProvider.java:102)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.content.ContentProvider.attachInfo(ContentProvider.java:944)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     at android.app.ActivityThread.installProvider(ActivityThread.java:4237)
    08-01 18:12:50.911: E/AndroidRuntime(1196):     ... 12 more
    08-01 18:12:51.241: I/dalvikvm(1196): threadid=3: reacting to signal 3
    08-01 18:12:51.291: I/dalvikvm(1196): Wrote stack traces to '/data/anr/traces.txt'
    08-01 18:12:51.541: I/dalvikvm(1196): threadid=3: reacting to signal 3
    08-01 18:12:51.601: I/dalvikvm(1196): Wrote stack traces to '/data/anr/traces.txt'
    08-01 18:12:58.262: I/Process(1196): Sending signal. PID: 1196 SIG: 9
以下是第75行(在logcat中提及):

以下是数据库创建模式:

public static final String DATABASE_CREATE_SCHEMA = "create table "
+ DATABASE_TABLE_NAME + " (" + RemindersTableMetaData._ID
+ " integer primary key autoincrement, " + REMINDER_TITLE
+ " text not null, " + REMINDER_BODY + " text not null, "
+ REMINDER_DATE_TIME + " text not null" + ");";
这是我的ContentProvider的onCreate():

以下是我的DataBaseHelper的构造函数:

// this class helps open, create, and upgrade the database
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, ReminderListProviderMetaData.DATABASE_NAME, null,
ReminderListProviderMetaData.DATABASE_VERSION);
}

我真是束手无策。谢谢您的帮助。

我想我看到了您的内容提供商的问题,我的评论详细说明了更改:

public boolean onCreate() {
    Log.d(TAG, "main oncreate called");
    mOpenHelper = new DatabaseHelper(getContext());

    /* Remove this line next line:
     *   1) db is null
     *   2) DatabaseHelper's constructor already silently calls this
     */
    //mOpenHelper.onCreate(db);

    return true;
}

原因:java.lang.NullPointerException。。。在com.corsair.android.taskEmployer.EmployerListProvider$DatabaseHelper.onCreate(employerListProvider.java:75)
employerListProvider.java中的第75行是什么?请发布DatabaseHelper.onCreate()方法。@Blight:不要在注释中发布代码。在原始问题上使用“编辑”选项并将其添加到那里。我可能可以从日志中看到,日志“inner oncreate called”被打印出来,然后它崩溃了,因此数据库类中存在问题。我知道你一定参考了很多教程,但我是通过一篇在:希望这对你也有帮助@Sam我尝试了它,但它给出了一个错误:无法直接调用SQLiteOpenHelper类型的抽象方法onCreate(SQLiteDatabase)(是的,当我看到我的错误时,我删除了该答案)。它看起来
db
为null,什么是您的RemindersTableMetaData构造函数?行mOpenHelper.open()给出了一个错误。DatabaseHelper的open()未定义,是否没有该行?(这只是其他人实现的猜测)好消息是,我们摆脱了“无法获得提供商”崩溃。所以我非常感谢你。但坏消息是,现在DatabaseHelper的onCreate从未被调用,所以我的数据库没有被创建,所以我会崩溃。我想如果我不能自己解决这个问题,我会为此提出一个新问题@山姆:非常感谢您的帮助。没问题,但请尝试将
publicstaticfinalintdatabase\u VERSION
设置为
2
。这是重置表架构的最简单方法。
public static final String DATABASE_CREATE_SCHEMA = "create table "
+ DATABASE_TABLE_NAME + " (" + RemindersTableMetaData._ID
+ " integer primary key autoincrement, " + REMINDER_TITLE
+ " text not null, " + REMINDER_BODY + " text not null, "
+ REMINDER_DATE_TIME + " text not null" + ");";
// database helper member variable
private DatabaseHelper mOpenHelper;
private SQLiteDatabase db;
// component creation callback
@Override
public boolean onCreate() {
Log.d(TAG, "main oncreate called");
mOpenHelper = new DatabaseHelper(getContext());
mOpenHelper.onCreate(db);
return true;
}
// this class helps open, create, and upgrade the database
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, ReminderListProviderMetaData.DATABASE_NAME, null,
ReminderListProviderMetaData.DATABASE_VERSION);
}
public boolean onCreate() {
    Log.d(TAG, "main oncreate called");
    mOpenHelper = new DatabaseHelper(getContext());

    /* Remove this line next line:
     *   1) db is null
     *   2) DatabaseHelper's constructor already silently calls this
     */
    //mOpenHelper.onCreate(db);

    return true;
}