2013-02-13 4 views
0

Я кодирую приложение для Android и должен поймать в основной деятельности все выброшенные исключения и отправить мне электронное письмо. Но в некоторых районах в моем приложении я не могу просто выбросить исключение методом:Выбросить исключение из основной ситуации из Dialog

Пример: onCreateDialog() в пользовательской DialogFragment:

builder.setView(addCatLayout) 
        // Add action buttons 
        .setPositiveButton(R.string.button_ok, 
          new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialog, int id) { 

            try { 
            // Save some data in DB here 
            } catch (Exception e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 
            dialog.dismiss(); 
           } 
          }) 
        .setNegativeButton(R.string.button_cancel, 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int id) { 
            // Close the dialog window 
            dialog.dismiss(); 
           } 
          }); 
      return builder.create(); 

Мой вопрос, как я могу удалить попытаться поймать блок из этот метод и непосредственно бросать исключение, которое нужно уловить в моей основной деятельности? Я хочу иметь только один блок catch catch в основном действии, который улавливает все исключения и отправляет мне почту. Это возможно?

Спасибо!

+0

Вы можете сделать это, исключив исключение. Таким образом, исключение, которое наследуется от RuntimeException. Исключения, подобные этому, не нужно улавливать (проверено). –

ответ

1

При создании диалога в деятельности и хотите обрабатывать исключения там

активность:

protected void handleException(Exception e) { 
    e.printStackTrace(); 
} 

OnClick:

@Override 
public void onClick(DialogInterface dialog, int id) { 
    try { 
     // Save some data in DB here 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     handleException(e); // methods are visible to nested classes 
    } 
    dialog.dismiss(); 
} 

Если вы создаете диалоговое внешнюю активность, то вы должны

public void handleException(Exception e) { 
    e.printStackTrace(); 
} 

Dialog класс Создание

public static void createDialog(final YourActivity activity) { 

.... 

    @Override 
    public void onClick(DialogInterface dialog, int id) { 
     try { 
      // Save some data in DB here 
     } catch (Exception e) { 
      activity.handleException(e); 
     } 
     dialog.dismiss(); 
    } 


} 

Но именно так это лучше практика, чтобы сделать вашу активность реализовать некоторый интерфейс, как

public final class YourActivity implements ExceptionHandler { 

Если обработчик исключений является

public interface ExceptionHandler { 
    void handleException(Exception e); 
} 

и передать Интерфейс обработчика исключений

public void createDialog(final ExceptionHandler handler) { 
+0

Спасибо! Я создал интерфейс, это хорошая идея для обработки исключений таким образом. – Meher

Смежные вопросы