2011-03-02 42 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

相關問題