2011-03-02 81 views
6

之前,所以我不知道该怎么做或什么意思我从来没有得到这个错误未处理的异常类型的错误

未处理的异常类型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 
} 

它给了我两个选择“添加抛出声明”和“使用的try/catch包围”。

我有什么做的,为什么呢?

+0

这是抛出什么?您违反了联系操作的限制。 – Reno 2011-03-02 02:49:03

回答

26

这意味着你打电话的方法是用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); 
    } 
} 

现在我已经经历了由foo抛出该编译器抱怨潜力Exception。既然已经处理完毕,我不需要在我的bar方法中添加throws指令。

+0

伟大的答案谢谢 – tyczj 2011-03-02 14:59:49

相关问题