У меня есть следующий код с несколькими попытками... поймать, есть ли способ сделать его проще?
try {
saveToInternalStorage(((BitmapDrawable) image1.getDrawable()).getBitmap(), imageFilename + "_1");
} catch (Exception e) {
e.printStackTrace();
}
try {
saveToInternalStorage(((BitmapDrawable) image2.getDrawable()).getBitmap(), imageFilename + "_2");
} catch (Exception e) {
e.printStackTrace();
}
try {
saveToInternalStorage(((BitmapDrawable) image3.getDrawable()).getBitmap(), imageFilename + "_3");
} catch (Exception e) {
e.printStackTrace();
}
try {
saveToInternalStorage(((BitmapDrawable) image4.getDrawable()).getBitmap(), imageFilename + "_4");
} catch (Exception e) {
e.printStackTrace();
}
Код кажется странным. Если первое «saveToInternalStorage» не удается, это считается достаточно необычным, чтобы распечатать трассировку стека. Но затем мы продолжаем и вызываем «saveToInternalStorage» для второго изображения. Трудно поверить, что программа делает что-то полезное, фактически игнорируя ошибки. Одна попытка/поймать имеет более очевидную семантику: сдаться при первой неудаче.
Вы почти никогда не должны catch Exception
; вместо этого поймайте более значимый класс (IOException
), который вы понимаете.
Да... Однако опасения, высказанные в комментариях, справедливы.
Все это в сторону. вот разбрызгивание кода
var array = new[]{ image1, image2, image3, image4 };
for (var i = 0; i < array.Length; i++)
{
try
{
saveToInternalStorage(array[i].getDrawable().getBitmap(), $"{imageFilename}_{i + 1}");
}
catch (Exception e)
{
e.printStackTrace();
}
}
Я получаю эти изображения с 4 разных кнопок изображения, поэтому я не могу использовать «для», и мне все равно, было ли одно или несколько пустыми.
Если то, что вы написали, действительно соответствует логике, то:
private void trySave(Whatever image. String file) {
try {
saveToInternalStorage(image.getDrawable().getBitmap(), file);
}
catch (Exception exc) {
exc.printStackTrace();
}
}
и позвони как
trySave(image1, imageFilename+"_1)";
trySave(image2, imageFilename+"_2");
trySave(image3, imageFilename+"_3");
trySave(image4, imageFilename+"_4");
Подпрограммы уменьшают количество повторений.
если вы хотите удалить множественный перехват попытки, вы можете просто поместить блок перехвата попытки в saveToInternalStorage, а затем, если вас не волнует ошибка, просто используйте finally вместо перехвата. его быстрее не поймать, так как он не отслеживает возникшую ошибку.
// example 1 if you are not interested in the error or the success responce
void saveToInternalStorage(BitmapDrawable bd, String file_name)
{
try{
//..put your code here
}finally{
}
}
// example 2 if you are interested in just geting the success response
boolean saveToInternalStorage(BitmapDrawable bd, String file_name)
{
try{
//..put your code here
return true;
}finally{
return false;
}
}
// example 3 if you are don't want to touch your saveToInternalStorage function
boolean saveToInternalStorage(BitmapDrawable bd, String file_name)
{
try{
saveToInternalStorage(bd,file_name)
return true;
}finally{
return false;
}
}
Цикл for может быть лучше для вас!