GetBitmapメソッドを使用して画像を表示しています。これをメソッドとして使用しているため、ビットマップを返す場合は画像を表示しますが、nullを返す場合は例外をキャッチします。ただし、入力されたURLも間違っている場合は、FileNotFoundExceptionを処理する必要があります。 2つの例外を処理してUIに表示する方法
public Bitmap getBitmap(final String src) {
try {
InputStream stream = null;
URL url = new URL(src);
Java.net.URL url = new Java.net.URL(src);
URLConnection connection = url.openConnection();
InputStream input = connection.getInputStream();
myBitmaps = BitmapFactory.decodeStream(input);
return myBitmaps;
} catch (IOException e) {
e.printStackTrace();
Log.e("IO","IO"+e);
return null;
}
catch(OutOfMemoryError e1) {
e1.printStackTrace();
Log.e("Memory exceptions","exceptions"+e1);
return null;
}
}
活動では、私はこのように与えました
Bitmap filename=service.getBitmap(url_box.getText().toString());
if(file_name!=null)
{
displaybitmap(file_name);
}
else
{ //Toast.makeText("Memory Error");
//my question is how to handle two exception in UI where memory error and also
// when entered url is wrong, file not found exceptions also to handle.
}
本当に、これはお勧めしません...
try {
...
} catch (Exception e) {
// This will catch any exception, because they are all descended from Exception
System.out.println("Error " + e.getMessage());
return null;
}
問題をデバッグするためにスタックトレースを見ていますか?それらを追跡することは難しくありません。 LogCatを見て、赤いテキストの大きなブロックを確認して、クラッシュの原因となったメソッドとエラーを確認します。
この方法ですべてのエラーをキャッチすると、プログラムは期待どおりに動作せず、ユーザーがレポートしたときにAndroid Marketからエラーレポートが届きません。
UncaughtExceptionHandlerを使用して、いくつかのクラッシュを防ぐことができます。私は1つを使用していますが、コンピューターから離れた電話でアプリをデバッグしているときのために、スタックトレースをファイルに出力するためだけに使用します。しかし、キャッチした例外をデフォルトのAndroid UncaughtExceptionHandlerに渡しました。これは、Androidで正しく処理できるようにするためです。ユーザーにスタックトレースを送信する機会を与えます。
キャッチ式を確認する
catch (IOException e) {
e.printStackTrace();
Log.e("IO","IO"+e);
return null;
}
catch(OutOfMemoryError e1) {
e1.printStackTrace();
Log.e("Memory exceptions","exceptions"+e1);
return null;
}
ここでは、両方の例外でnullを返しています。私の提案はこれらのcatch句で変数を初期化するであり、アクティビティメソッドでその変数の値を確認します。
このような
String exceptionName="";
catch (IOException e) {
e.printStackTrace();
Log.e("IO","IO"+e);
exceptionName="IOException";
return null;
}
catch(OutOfMemoryError e1) {
e1.printStackTrace();
Log.e("Memory exceptions","exceptions"+e1);
exceptionName="OutOfMemoryError";
return null;
}
今あなたの活動中
Bitmap filename=service.getBitmap(url_box.getText().toString());
if(file_name!=null)
{
displaybitmap(file_name);
}
else
{ //Toast.makeText("Memory Error");
//my question is how to handle two exception in UI where memory error and also
// when entered url is wrong, file not found exceptions also to handle.
if (exceptionName.equals("OutOfMemoryError")) {
// Handle here
}
else{
// Handle here
}
}
あなたの解像度からデフォルトのビットマップを返します。しかし、ビットマップを操作するためのUniversal Image Loaderと呼ばれる非常に優れたライブラリがありますので、チェックしてください。
代わりにgetBitmap
メソッドから例外をスローし、クライアント(アクティビティ)が例外を処理できるようにします。この場合、ビットマップまたは例外を受け取り、return null
ビットマップをスキップして、 "代わりに、例外/エラーの場合(これはnullケースであるため)、catchブロックの「デフォルトのビットマップ読み込み」。
public Bitmap getBitmap(final String src) throws FileNotFoundException,
OutOfMemoryError, IOException, MalformedURLException {
URL url = new URL(src);
URLConnection connection = url.openConnection();
InputStream input = connection.getInputStream();
return BitmapFactory.decodeStream(input);
}