2016-10-19 8 views
1

これは基本的な質問かもしれませんが、回答が見つかりません。あなたは、AndroidにのみにFileNotFoundをキャッチしたい場合は、あなたはAndroidでENOSPCをキャッチする

 } catch (FileNotFoundException e) { 

を書くしかし、あなたは正確にENOSPC(デバイス上で左スペースがありません)エラーをキャッチしたい場合は、何を書くのですか?この1つのエラーを明示的に処理したいので、私は "catch(Exception e)"を使うことはできません。

答えて

3

enospcがjava.io.IOExceptionとして通知されているため、他の多くのio関連の問題も同様に取り込むことができます。しかし、原因とエラーを検索することで、あなたがこのように、ズームインやENOSPC例外を処理するが、他のすべてを再スローすることができ、シグナリングです:

} catch (IOException ex) { 
    boolean itsanenospcex = false; 
    // make sure the cause is an ErrnoException 
    if (ex.getCause() instanceof libcore.io.ErrnoException) { 
     // if so, we can get to the causing errno 
     int errno = ((libcore.io.ErrnoException)ex.getCause()).errno; 
     // and check for the appropriate value 
     itsanenospcex = errno == OSConstants.ENOSPC; 
    } 
    if (itsanenospcex) { 
     // handle it 
    } else { 
     // if it's any other ioexception, rethrow it 
     throw ex; 
    } 
} 

追記:} catch (Exception e) {generally considered bad practiceです。

+0

ありがとう、私はそれを理解する日が必要でした。実際にテスト目的でこのエラーをシミュレートするための推奨される方法はありますか? – Kenobi

+0

ErrnoExceptionのコンストラクタがあり、errnoの値を受け取りますので、テストコードの中で新しいErrnoException( "functionname"、ENOSPC)をスローすることができます - 私はあなたがそのfunctionname文字列に入れなければならないものを念願していますが、テスト目的のために本当に重要です。 – fvu

関連する問題