如何检查catch上的IOException原因?
e.getCause().getMessage()
是否总是在同一原因的所有Android版本和设备上返回相同的字符串?检查IOException的原因是android.system.ErrnoException: write failed: ENOSPC (No space left on device)
以检查用户的设备是否在该特定驱动器上的空间不足是一种好方法吗?
try {
// Here I'm writing a file with OutputStream
} catch (IOException e) {
// Check if IOException cause equals android.system.ErrnoException: write failed: ENOSPC (No space left on device)
} finally {
}
答案 0 :(得分:0)
依靠错误消息通常不是一个好主意,因为错误消息可能随操作系统版本而变化。 如果定位到API级别21或更高级别,则有一种简便的方法可以根据错误代码查找IOException的根本原因。 (您的情况是 ENOSPC ) https://developer.android.com/reference/android/system/OsConstants#ENOSPC
可以这样检查:
catch (IOException e) {
if (e.getCause() instanceof ErrnoException) {
int errorNumber = ((ErrnoException) e.getCause()).errno;
if (errorNumber == OsConstants.ENOSPC) {
// Out of space
}
}
}
errno 是https://developer.android.com/reference/android/system/ErrnoException
中的公共字段