【问题标题】:Problems with populating a ListView with SQLite使用 SQLite 填充 ListView 的问题
【发布时间】:2011-05-25 08:44:03
【问题描述】:

我正在尝试将我自己的 SQLite db 填充到 android listview 中以供查看,但有一个问题,代码运行但会生成“意外退出”。

我检查了我的 DDMS,模拟器在数据库中有我的 SQLite 文件,该文件是从资产文件中复制的。

我不确定这里出了什么问题,谁能给我一些建议,我应该从哪里开始?或者我在下面提供的代码有什么问题吗?我可以在哪里检查代码中的潜在问题?

谢谢!!!

private void fillData() {

    Cursor drugsCursor = mDbHelper.fetchAllDrugs();
    startManagingCursor(drugsCursor);

        //Creating an array to specify the fields we want
    String[] from = new String[] {DrugsDbAdapter.KEY_ROWID};

        //and an array of the fields we want to bind in the view
    int[] to = new int[] {R.id.text1};

        //To Create the simple cursor adapter and set it to display
    SimpleCursorAdapter drugs = new SimpleCursorAdapter(this, R.layout.drug_row, drugsCursor, from, to);

    setListAdapter(drugs);

}

处理光标的 DrugsDbAdapter.java 在这里

public Cursor fetchAllDrugs() {     
    return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_DRUG, KEY_CONTENT, KEY_INDICATION, KEY_DOSAGE, KEY_SPECIALPRECAUTION} , null, null, null, null, null);    
}

我的 LogCat 的输出(输出的红色部分 - 我应该发布整个日志吗?)是:

05-25 18:12:22.338: WARN/dalvikvm(27763): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763): FATAL EXCEPTION: main
05-25 18:12:22.434: ERROR/AndroidRuntime(27763): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.paad.medboxsd/com.paad.medboxsd.medboxsd}: java.lang.NullPointerException
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at android.os.Looper.loop(Looper.java:123)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at android.app.ActivityThread.main(ActivityThread.java:4627)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at java.lang.reflect.Method.invokeNative(Native Method)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at java.lang.reflect.Method.invoke(Method.java:521)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at dalvik.system.NativeStart.main(Native Method)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763): Caused by: java.lang.NullPointerException
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at com.paad.medboxsd.medboxsd.fillData(medboxsd.java:67)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at com.paad.medboxsd.medboxsd.onCreate(medboxsd.java:56)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-25 18:12:22.434: ERROR/AndroidRuntime(27763):     ... 11 more
05-25 18:12:22.514: WARN/ActivityManager(59):   Force finishing activity com.paad.medboxsd/.medboxsd
05-25 18:12:23.034: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{450fc298 com.paad.medboxsd/.medboxsd}

【问题讨论】:

  • 发布logcat的输出

标签: android sqlite


【解决方案1】:

我怀疑问题在于您没有向光标提供名为“_id”的列。查看我对Android: column '_id' does not exist problem的回复

【讨论】:

  • 我一直认为 _id 列只有在我想处理 onClick 事件时才重要。不适用于在列表中显示数据。
  • @Flo:游标必须有一个名为“_id”的列,或者从名为“_id”的实际 DB 表列返回,或者使用原始 SQL 查询作为别名。它是光标用作索引的内容,无论数据是否被显示、选择或其他。
  • @MrSquonk:谢谢!我已经按照reigndesign.com/blog/… 的说明使用我自己的文件进行了 sqlite 数据库设置,这非常彻底。我已经设置了我的sqlite文件,里面有_id来加载......我还定义了一个KEY_ROWID =“_id”,我用它来查询但就是不明白为什么......
  • @jamen:好吧,可能不是我当时的想法。那么“medboxsd.java”的第 67 行是哪一行?
  • @MrSquonk:感谢您的回复! medboxsd.java 的第 67 行是第一个代码框中的第一行“Cursor drugCursor = mDbHelper.fetchAllDrugs();”我已经尝试解决这个问题整整 2 天了......是否有可能你可以看看为了我 ?它是我试图将数据库加载并填充到设备中的代码,我可以压缩我的整个文件发送给你?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多