0

当我尝试将一条记录插入名为“提醒”的表中时,我的应用程序失败(请参阅下面的 logcat)。我查看了 20 多个类似的帖子,但我无法发现我的错误。这可能是一个明显的错误,但我能找到它。

日志猫:

02-22 14:10:25.884: E/SQLiteLog(2638): (1) table reminders has no column named title
02-22 14:11:22.935: D/dalvikvm(2638): threadid=11: still suspended after undo (sc=1      dc=1)
02-22 14:11:34.684: W/dalvikvm(2638): threadid=11: thread exiting with uncaught   exception (group=0x40a13300)
02-22 14:11:34.684: D/dalvikvm(2638): threadid=1: still suspended after undo (sc=1 dc=1)
02-22 14:11:39.263: D/dalvikvm(2638): threadid=1: still suspended after undo (sc=1 dc=1)
02-22 14:11:40.043: E/AndroidRuntime(2638): FATAL EXCEPTION: ModernAsyncTask #1
02-22 14:11:40.043: E/AndroidRuntime(2638): java.lang.RuntimeException: An error occured while executing doInBackground()
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at java.lang.Thread.run(Thread.java:856)
02-22 14:11:40.043: E/AndroidRuntime(2638): Caused by: java.lang.IllegalArgumentException: Unknown Uri: content://com.example.android.taskreminder.ReminderProvider/reminder
02-22 14:11:40.043: E/AndroidRuntime(2638):     at com.example.taskreminder.ReminderProvider.query(ReminderProvider.java:138)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.content.ContentProvider.query(ContentProvider.java:652)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.content.ContentProvider$Transport.query(ContentProvider.java:189)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.content.ContentResolver.query(ContentResolver.java:370)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.content.ContentResolver.query(ContentResolver.java:313)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:49)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:35)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:240)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:51)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:40)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:123)
02-22 14:11:40.043: E/AndroidRuntime(2638):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-22 14:11:40.043: E/AndroidRuntime(2638):     ... 4 more
02-22 14:11:40.333: D/dalvikvm(2638): threadid=1: still suspended after undo (sc=1 dc=1)
02-22 14:11:40.473: D/dalvikvm(2638): threadid=1: still suspended after undo (sc=1 dc=1)
02-22 14:11:40.517: D/dalvikvm(2638): GC_CONCURRENT freed 233K, 3% free 11200K/11527K, paused 91ms+91ms, total 260ms
02-22 14:11:51.376: I/Process(2638): Sending signal. PID: 2638 SIG: 9

以下是相关代码:

private static class DatabaseHelper extends SQLiteOpenHelper {      

private static final String DATABASE_CREATE = "CREATE TABLE "
            + DATABASE_TABLE + " (" + COLUMN_ROWID
            + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_TITLE
            + " TEXT NOT NULL, " + COLUMN_BODY + " TEXT NOT NULL, "
            + COLUMN_DATE_TIME + " INTEGER NOT NULL);";


    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    // Called when the database is created for the first time
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE);            
    }

@Override
public boolean onCreate() {
    // Calls getWritableDataBase() on a DatabaseHelper object
    mDb = new DatabaseHelper(getContext()).getWritableDatabase();
    return true;        
}

private static class DatabaseHelper extends SQLiteOpenHelper {


    private static final String DATABASE_CREATE = "CREATE TABLE "
            + DATABASE_TABLE + " (" + COLUMN_ROWID
            + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_TITLE
            + " TEXT NOT NULL, " + COLUMN_BODY + " TEXT NOT NULL, "
            + COLUMN_DATE_TIME + " INTEGER NOT NULL);";


    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE);            
    }
          }

   public Uri insert(Uri uri, ContentValues values) {       
    values.remove(ReminderProvider.COLUMN_ROWID);
    long id = mDb.insertOrThrow(ReminderProvider.DATABASE_TABLE, null, Values);
       getContext().getContentResolver().notifyChange(uri, null);
       return ContentUris.withAppendedId(uri, id);
}

下面是传递给上述 db.execSQL(DATABASE_CREATE) 调用的字符串 DATABASE_CREATE(取自调试器)的值。

CREATE TABLE 提醒(_id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT NOT NULL,body TEXT NOT NULL,remind_date_time INTEGER NOT NULL);

除非我遗漏了什么,否则它对我来说是正确的。

无论如何,在您创建数据库后(并通过 log.d() 显示)以编程方式(通过方法)检索数据库的架构,以便您可以确认它是使用适当的列创建的?我尝试在 shell 中使用 SQLite3 命令。似乎数据库存在(即,使用 .databases 命令我可以看到名称为 /data/data/com.example.taskreminder/databases/data.db 的“文件”)。但是,当我尝试查看表格时(通过 .tables 命令),我没有得到任何结果……但不确定我是否正确使用它。我可以用来诊断此类问题的步骤有什么建议吗?

顺便说一句,这是我第一次使用这个论坛...所以不确定我是否使用过

谢谢。

4

0 回答 0