Глядя на исходный код, конструкторы для ObjectInputStream
и BufferedInputStream
могут выдавать исключения, из-за которых объект FileInputStream
будет размещен в следующей строке , но переменная in
все равно будет нулевой:
in = new ObjectInputStream(
new BufferedInputStream(
new FileInputStream(mFile),
STREAM_BUFFER_SIZE)
);
Поскольку in
равно нулю, когда мы добираемся до блока finally
, этот открытый объект FileInputStream
не будет закрыт вашим методом closeQuietly()
, что в конечном итоге приведет к жалобе StrictMode
:
Самое простое исправление, которое я бы предложил, - разделить это распределение на 3 переменные и вызвать closeQuietly()
для каждой, возможно, что-то вроде этого:
private ArrayList<Uri> loadPath() {
final ArrayList<Uri> uris = new ArrayList<Uri>();
if (mFile.exists()) {
ObjectInputStream ois = null;
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(mFile);
bis = new BufferedInputStream(fis, STREAM_BUFFER_SIZE);
ois = new ObjectInputStream(bis);
final ArrayList<String> strings = new ArrayList<String>();
strings.addAll((ArrayList<String>) ois.readObject());
for (final String string : strings) {
uris.add(Uri.parse(string));
}
} catch (final Exception e) {
mFile.delete();
} finally {
closeQuietly(fis);
closeQuietly(bis);
closeQuietly(ois);
}
}
return uris;
}