当前位置: 首页 > 面试题库 >

未处理的异常类型错误

郭均
2023-03-14
问题内容

我之前从未遇到过此错误,所以我不确定该怎么做或意味着什么

未处理的异常类型 OperationApplicationException

它在以下代码中发生:

public void putSettings(SharedPreferences pref){
    ArrayList<ContentProviderOperation> ops =
          new ArrayList<ContentProviderOperation>();

    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
    .withSelection(Data.RAW_CONTACT_ID + "=?", new String[]{String.valueOf(pref.getString(SmsPrefs.ID, ""))})
    .withValue(Data.MIMETYPE,"vnd.android.cursor.item/color")
    .withValue("data1",nColor).build());
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); //error


    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
    .withSelection(Data.RAW_CONTACT_ID + "=?", new String[]{String.valueOf(pref.getString(SmsPrefs.ID, ""))})
    .withValue(Data.MIMETYPE,"vnd.android.cursor.item/vibrate")
    .withValue("data1", nVibrate).build());
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); //error

    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
    .withSelection(Data.RAW_CONTACT_ID + "=?", new String[]{String.valueOf(pref.getString(SmsPrefs.ID, ""))})
    .withValue(Data.MIMETYPE, "vnd.android.cursor.item/sound")
    .withValue("data1", ringTonePath).build());
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);//error
}

它给了我2个选项“添加抛出声明”和“使用try / catch进行环绕”。

我该怎么办,为什么?


问题答案:

这意味着您要调用的方法已使用throws指令声明了从Exception类派生的异常。当以这种方式声明一个方法时,您将被迫使用一个try/catch块来处理该异常,或者将一个相同的throws(对于相同的异常或超类型)语句添加到您的方法声明中。

一个例子。

我想foo在我的方法中调用某个方法bar

这是foo的定义:

public static void foo(String a) throws Exception {
    // foo does something interesting here.
}

我想打电话foo。如果我只是这样做:

private void bar() {
    foo("test");
}

…然后我会得到您遇到的错误。 foo向世界宣告它真的可能决定扔一个,Exception而您最好准备好应对它。

我有两个选择。我可以bar按如下方式更改的定义:

private void bar() throws Exception {
    foo("test");
}

现在,我公开了自己的警告,警告我的方法或调用的某些方法可能会引发Exception方法用户应处理的警告。由于我已经将方法的调用者的责任交给了我,因此我的方法不必处理异常本身。

如果可以的话,通常最好自己处理异常。这使我们进入第二种选择try/catch

private void bar() {
    try {
        foo("test");
    } catch(Exception e) {
        Log.wtf("MyApp", "Something went wrong with foo!", e);
    }
}

现在,我已经处理了潜在的Exception被抛出foo,编译器在抱怨。既然已经处理过了,所以我不需要throws在我的bar方法中添加指令。



 类似资料:
  • 我正在构建一个颤振应用程序,我必须解析api中的一些数据,我设置了所有内容,但我收到了这个错误,我不知道为什么,我是颤振新手,任何帮助都将不胜感激。谢谢。 生成的错误 这是我的api响应示例 这就是我处理数据的方式 这是模型课

  • 我想使用MongoDB用NestJs和TypeORM创建一个应用程序。假设我有一个实体,除了ID字段外,还有两个唯一的字段 当我想用已经存在的或创建一个新模块时,我得到了以下异常错误 因此,在catch语句中,我必须处理传入的错误。我要做的是 TypeORM是否公开预制异常?是否有我可以使用的枚举?获取这些TypeORM数据库错误的好方法是什么? 这里似乎列出了一些错误 https://githu

  • 我正在解码一个响应体,我得到了错误: 我在Udemy上学习颤振教程时,正在尝试使用API。教程说要使用https://javiercbk.github.io/json_to_dart/将JSON转换为Dart。我把JSON从https://www.openbrewerydb.org/并将其转换为Dart,但我遇到的问题是,当我尝试解码API时,我得到了未处理的错误异常:“List”类型不是“Map

  • 我对使用颤振和特定于平台的代码非常陌生,所以如果这是一个愚蠢的问题,请原谅我。我正在使用一个事件通道将数据从android端返回到Flatter。我正在返回一份清单 但是,当我试图添加它时,它给出了一个异常,“未处理的异常:类型'列表'不是类型'列表'的子类型 这是我要将贴图对象添加到的列表。 列表 这是我的添加代码。忽略print语句。 我尝试过像cast或from这样的方法,但它对我不起作用,

  • 我收到了错误消息: 被精确定位的线在这里: 返回类型为