【问题标题】:try/catch not working and crashes app android尝试/捕获不起作用并崩溃应用程序 android
【发布时间】:2021-01-25 01:59:46
【问题描述】:

我在我的 SQLite 数据库 android 中插入一些数据。我创建了一个内容值的 ArrayList。以下是我的代码

try {
                SQLiteDatabase db = this.getWritableDatabase();
                db.beginTransaction();
                for (int i = 0; i < arrayListAudio.size(); i++) {
                    db.insert(TABLE_AUDIO_FILES, null, arrayListAudio.get(i));
                }
                for (int i = 0; i < arrayListText.size(); i++) {
                    db.insert(TABLE_TEXT_FILES, null, arrayListText.get(i));
                }
                db.setTransactionSuccessful();
                db.endTransaction();
                db.close();
                //arrayListText.clear();
                //arrayListAudio.clear();
} catch (SQLException e) {
       Log.d("vijaysee", e.getMessage());
}

它可以工作,但有时它不起作用并导致应用程序崩溃

我的问题是它直接使应用程序崩溃,因为 try/catch 不起作用。如果代码中有任何问题,那么它应该调用 catch,但它会导致应用程序崩溃。我认为像catch(// some change){} 这样的捕获括号应该有一些变化。请帮我解决这个问题。

【问题讨论】:

    标签: android sqlite android-sqlite try-catch


    【解决方案1】:

    您正在捕获 Java SQLException 而不是 Android SQLiteException。如果您不知道要捕捉什么,请始终尝试捕捉Exception。我宁愿担心 SQL 语句:INSERT INTO textFiles(null) VALUES (NULL)(它既不包含列也不包含值)。

    【讨论】:

    • 这是否意味着表中没有列。因为我要删除表并创建新表,所以我每次打开活动。
    • 这意味着这是无效的INSERT 语句。您需要插入至少 1 列和 1 个值。
    • 好的,这意味着我正在插入空值,所以问题出在 arrayList 中?
    • 可能是这样,但您也明确地将null 传递到该方法中。还有 Room,但要学习它,最好先学习 SQLite,然后再学习 Room(它是一个带有对象关系映射的抽象层,它完全抽象了所有这些,但在底层仍然使用 SQLite)。跨度>
    • 感谢您的提示。
    【解决方案2】:

    应用崩溃的原因,

    1. 我没有使用同步(在线程中)
    2. 我应该使用 Exception 类而不是指定异常来捕获。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      相关资源
      最近更新 更多