我之前从未犯过这个错误所以我不知道该做什么或意味着什么
未处理的异常类型
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环绕”。
我该怎么办?为什么?
答案 0 :(得分:28)
这意味着您正在调用的方法使用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
指令。