1. ホーム
  2. java

[解決済み] 未処理例外型エラー

2022-02-12 02:19:06

質問

このエラーは初めてなので、どうすればいいのか、どういう意味なのかよくわかりません。

<ブロッククオート

未処理の例外タイプ 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
}

throws宣言を追加する」と「try/catchで囲む」の2つのオプションが表示されます。

どうすればいいのでしょうか?

解決方法は?

呼び出しているメソッドが 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 そして、それに対処できるように準備しなければなりません。

選択肢は2つあります。 私は変更することができます bar の定義は以下の通りです。

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

今、私は自分のメソッドや、私が呼び出したメソッドが Exception であり、私のメソッドのユーザが対処すべきものです。 私は自分のメソッドの呼び出し側に責任を先送りしているので、私のメソッドは例外そのものを処理する必要はありません。

できることなら、自分で例外を処理したほうがいい場合が多い。 そこで、2つ目の選択肢である try/catch :

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

これで、潜在的な Exception によって投げられた foo コンパイラが文句を言っていたこと。 この問題は解決されたので throws ディレクティブを bar メソッドを使用します。