2017-01-21 29 views
1

私はアンドロイド開発の新人です。オーバーライドonCreate()私の活動の方法で、私はいくつかの操作を実行します。例えば、 SharedPreferenceがすでに利用可能かどうかを確認し、他のアクティビティにルーティングします。このonCreate()メソッドで例外処理を実行する方法を教えてください。 try catchにコンテンツをラップし、例外時にエラーダイアログを表示するのは正しい方法ですか?例外が適切に処理されていない場合はアクティビティのonCreate()メソッドでのエラー処理android

、私の場合のonCreate()メソッドは、メッセージでアプリがクラッシュ:

は、残念ながら、あなたのアプリケーションは、インターネットでの検索では

を動作を停止し、私はそれを発見するためにUncaughtExceptionHandlerを使用することができました。どのサンプル実装でも、すべてのアクティビティから呼び出す方法が役に立ちます。このようなもので

+1

エラーとは何ですか?あなたのコードを投稿してください –

+2

SharedPreferencesのエラーは、キーの存在またはヌルチェックによって確認できます。ヌルチェックはすべてのオブジェクトにも適用されます –

答えて

0

あなたonCreate()方法で、一般的な例外をキャッチすることができます:キャッチ

@Override 
protected void onCreate(Bundle arg0) { 
    super.onCreate(arg0); 
    try { 
     // do whatever you need 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

例外は、多くのゴールで使用することができます。興味深いのは、いくつかの問題を修正するために特定の予想例外をキャッチすることです(たとえば、ジェネリック値を変数に設定するなど、エラーが発生した後はnullを設定するなど)。

ただし、エラーが発生したり、最悪の場合アプリケーションがクラッシュすることは避けてください。どのような種類のソフトウェアを開発しているかによって、クラッシュは(Androidアプリのような)小さな問題(飛行機のソフトウェアや発電所のソフトウェアのような非常に大きなもの)を表している可能性があります。

2種類の例外を特定できます。

最初のタイプは、特定の問題に固有の例外です。メソッドシグネチャとして宣言する必要があるため、これらの例外とその相対的な問題を管理することを推奨または義務づけられています。これらの例外は、解析エラーや入出力エラーなど、特定のコード実行中に発生する可能性のあるエラーを表します。このタイプの問題では、特定の例外があり、それらを捕捉して容易に管理することができます(たとえば、エラーの後でデフォルト値を持つ変数を初期化すると言います)。

これらの例外の2番目のタイプは、代わりにプログラムの実行中に発生する一般的な問題を表しています。それらは大きくて一般的な集合であり、一般的にそれらの発生確率は低い。このため、あなたはそれらを管理することを忘れてはなりません。このタイプの主な例は、一般的なExceptionクラスです。

Gabe Sechanが提案したように、例外をキャッチすることはバグを解決する正しい方法ではありません。

main()で一般的な例外をキャッチすることは、たとえば、他に何も利用可能でない場合、人間が読むことができるデフォルトのエラーを表示するための方法です。 また、クラッシュの可能性を減らすために現在の操作の失敗を維持する方法かもしれません。

今、Androidでは直接main()メソッドで動作することはできません。 onCreate()メソッドが実行されて終了するので、ここで一般的な例外をキャッチするのはあまり意味がありません。明らかに、それはあなたのonCreate()メソッドで何をしているのか、エラーが発生した場合に何をしたいのかによっても異なります。あなたはいくつかの奇妙なことをすることができます(あなたはonCreate()メソッドで行うべきことが非常に定義されています)。エラーを表示するだけの大きな問題を管理する必要があるかもしれません。それぞれのブロックで同じことをするための例外があります。catchブロック。

実行中に発生したすべてのエラーについてメッセージが表示され、ActivityActivityになりました。これは正しいアプローチです。

あなたが達成したいものを代わりにする場合は、アプリの実行のすべての中に生成されたエラーのすべてを傍受するために、良い方法は、Java main()メソッドにジェネリックExcepetionをキャッチするために同様に作用UncaughtExceptionHandler、可能性があります。このレベルでは、興味深いアプローチがhereと記載されています。

例外について詳しくは、thisthisを参照してください。

+1

それは恐ろしい考えです。例外ハンドラを実装するだけではうまくいかない(アプリケーションは正しく続行できない可能性があります)、悪い習慣です。エラーを解消して修正してください。 –

+2

あなたは何を言っていますか?どのエラーが発生しているかによって異なります。 Mineはほんの一例で、例外の処理後のアプリケーションの実行は例外の処理方法によって異なります。 OOPのマニュアルで述べたように... – firegloves

+0

私は、一般的な例外ハンドラは機能しないと言っています。あなたはすべての例外を個別に解決する必要があります。基本的に例外が発生するたびに、修正するバグがあります。例外はランダムに発生するだけではありません。 –

0

これは間違った方法です。代わりに、あなたのlogcatに入ってください。例外のスタックトレースを読み取ります。あなたが間違ったことを見つけ出す修理する。あなたが特定の理由で特定の例外をキャッチしていない限り、例外をキャッチするのは恐ろしい習慣です。アプリが正常に続行できる状態にないことはほとんどありません。怠惰ではなく、あなたのバグを追跡し、修正してください。

+0

なぜ人々はこれをdownvotingですか? –

+0

@miladzahedi私は私の答えでいくつかの理由を説明しました – firegloves

+0

Gabeはこの質問に関して正確な答えを提供しました。問題を見つけて修正する必要があります。それは例外があるという点です! –

関連する問題