資料庫建立與新增功能正常,但點擊查詢跳轉至第二個 Activity 時顯示白屏,Log 顯示 while (cursor.moveToNext()) 迴圈未進入,導致無資料顯示。
// 錯誤寫法
Cursor cursor = db.rawQuery("select * from dict where ? or ?",
new String[]{"%" + ke + "%", "%" + ke + "%"});
WHERE ? OR ? 缺少欄位名稱,SQLite 會將參數視為字面值而非欄位條件,導致查詢無結果。
正確寫法:
Cursor cursor = db.rawQuery(
"select * from dict where word like ? or detail like ?",
new String[]{"%" + ke + "%", "%" + ke + "%"});
MainActivity 使用 putSerializable("date", list) 傳遞 ArrayList<Map<String,String>>,但 Result Activity 卻用 getString("date") 接收,型別不符導致崩潰或空白。
修正方案:
putSerializable 或改用 Parcelable 提升效能。getSerializable("date") 強制轉型,並遍歷 List 顯示於 TextView 或 RecyclerView。// Result.java 修正示例
Bundle bundle = getIntent().getExtras();
ArrayList<Map<String,String>> list =
(ArrayList<Map<String,String>>) bundle.getSerializable("date");
StringBuilder sb = new StringBuilder();
for (Map<String,String> map : list) {
sb.append("單字: ").append(map.get("word"))
.append("\n釋義: ").append(map.get("detail")).append("\n\n");
}
jieguo.setText(sb.toString());
| 檔案 | 問題 | 修正 |
|---|---|---|
| DatabaseHelper.java | 無 | 正常 |
| MainActivity.java | SQL 語法錯誤、Bundle 傳值型別 | 補上欄位名、修正序列化接收 |
| Result.java | getString 接收 List | 改用 getSerializable 並遍歷顯示 |
