2013-02-13 72 views
0

我編寫的android應用程序必須在主要活動中捕獲所有拋出異常並向我發送電子郵件。從對話框中拋出主要活動的異常

例:但是,在我的應用程序部分地區我不能只由該方法引發異常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(); 

我的問題如何從移除try catch塊這種方法,並直接拋出異常,以捕捉我的主要活動?我希望在主要活動中只有一個try catch塊捕獲所有異常並向我發送郵件。這可能嗎?

謝謝!

+0

你可以通過拋出一個未經檢查的異常來做到這一點。因此,從RuntimeException繼承的異常。這樣的例外,不必被捕獲(選中)。 – 2013-02-13 12:05:00

回答

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(); 
} 

對話框創建類

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 2013-02-13 12:46:03