2016-08-04 1 views
0

最近、デバイスのカメラを切断したとき。最初nullpointerExceptionアンドロイドでUnHandledExceptionHandlerを使用するには?

起こらないが、アプリ起動しない、nullpointerException

はそう、私が使用私はこれを試してみてくださいUnhandledExceptionHandler

に考える起こります。 私はカメラデバイスなしで、アプリがうまく実行したいです。

MainActivity.class

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String nameOfFrontFacingDevice = VideoCapturerAndroid.getNameOfFrontFacingDevice(); 

    VideoCapturerAndroid capturer = VideoCapturerAndroid.create(nameOfFrontFacingDevice); 
    if (capturer == null || capturer.equals("") == true) { 
     Thread.setDefaultUncaughtExceptionHandler(new UnhandledExceptionHandler(this)); 
     throw new NullPointerException(); 

    } 

UnhandledExceptionHandler.class

public class UnhandledExceptionHandler implements Thread.UncaughtExceptionHandler { 
private static final String TAG = "UnUnHandler"; 
private final Activity activity; 

public UnhandledExceptionHandler(final Activity activity) { 
    this.activity = activity; 
} 

public void uncaughtException(Thread unusedThread, final Throwable e) { 
    activity.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      String title = "Fatal error: " + getTopLevelCauseMessage(e); 
      String msg = getRecursiveStackTrace(e); 
      TextView errorView = new TextView(UnhandledExceptionHandler.this.activity); 
      errorView.setText(msg); 
      errorView.setTextSize(2, 8.0F); 

      ScrollView scrollingContainer = new ScrollView(UnhandledExceptionHandler.this.activity); 
      scrollingContainer.addView(errorView); 


      OnClickListener listner = new OnClickListener(){ 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
        System.exit(1); 
       } 
      }; 


      Builder builder = new Builder(UnhandledExceptionHandler.this.activity); 
      builder.setTitle(title).setView(scrollingContainer).setPositiveButton("Exit", listner).show(); 
     } 
    }); 
} 

private static String getTopLevelCauseMessage(Throwable t) { 
    Throwable topLevelCause = t; 
    while (topLevelCause.getCause() != null) { 
     topLevelCause = topLevelCause.getCause(); 
    } 
    return topLevelCause.getMessage(); 

} 

private static String getRecursiveStackTrace(Throwable t) { 
    StringWriter writer = new StringWriter(); 
    t.printStackTrace(new PrintWriter(writer)); 
    return writer.toString(); 
} 



     } 

このダイアログが表示されません。 UnhandledExceptionHandlerの使用方法 ?

答えて

0

キャッチされない例外ハンドラは、他のすべてのメカニズムが失敗した最悪の場合のシナリオでのみ使用されるはずです。 NullPointerExceptionを処理するには、ブロックをtry try に配置する必要があります。

Javaで例外処理を調べることをお勧めします。

UncaughtExceptionハンドラ - 予期しないエラーが発生したため、アプリケーションがクラッシュすることができないと、結果が不安定になることがあります。

例外に対する防御としてではなく、予期しない例外の報告またはログにのみ使用します。これはAppデザインの欠陥を示しています。

あなたはJavaはどのように動作するかの非常に気づいていないので、あなたはまだ私はあなたがあなたのためにこれを行うには、別のサードパーティのサービスを使用することをお勧め、たuncaughtExceptionHandlerを使用する予定の場合は...

例:--->Crashlytics(彼らが起こったときにそれが組み込まれているデフォルトの例外ハンドラとレポートクラッシュであり)、またはACRAなど....

+0

おかげで、私はカメラデバイスなしで欲しい結果として、アプリがそのように死亡していない、私は 'unhandledExceptionHandlerをしたいです' – chohyunwook

関連する問題