Учу андроид разработку. И уведел такую штуку:
FileOutputStream fos = null;
try {
EditText textBox = (EditText) findViewById(R.id.save_text);
String text = textBox.getText().toString();
fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
fos.write(text.getBytes());
Toast.makeText(this, "Файл сохранен", Toast.LENGTH_SHORT).show();
}
catch(IOException ex) {
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show();
}
finally{
try{
if(fos!=null)
fos.close();
}
catch(IOException ex){
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
Вопрос, зачем мы проверяем (fos!=null), что если просто закрыть без проверки. ?!)
Первоначальное значение fos
- это null:
FileOutputStream fos = null;
Если при создании fos
fos = openFileOutput(FILE_NAME, MODE_PRIVATE)
будет выброшено исключение, то в качестве значения fos
так и останется null.
Соответственно, если в блоке finally
(который выполнится и в случае появления исключения) не добавить проверку fos
на null, то попытка вызвать close
у null-a приведёт к NullPointerException, который в данном коде не отлавливается и приведёт к падению всего приложения
Можно заменить catch (IOException ex)
на catch (Exception ex)
в блоке finally
, чтобы отлавливать и NPE, но, на мой взгляд, явная проверка лучше
А ещё лучше воспользоваться конструкцией try-with-resources, чтобы доверить закрытие ресурсов системе:
try (FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE))
{
EditText textBox = (EditText) findViewById(R.id.save_text);
String text = textBox.getText().toString();
fos.write(text.getBytes());
Toast.makeText(this, "Файл сохранен", Toast.LENGTH_SHORT).show();
}
catch (IOException ex)
{
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show();
}
Единственное - в Android конструкция try-with-resources доступна с API level 19
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
друзья! Хотелось бы спросить про && и ||Если используется двойной амперсанд и первое выражение ложно (false), то второе выражение даже не будет...
Есть приложение с использованием Google MapsИ в нем есть список озер