我使用方法getBitmap来显示图像。当我使用它作为方法时,如果它返回位图显示图像但是如果它返回null,则捕获异常。但是如果输入的url也是错误的,它应该处理FileNotFoundException。如何处理两个异常并在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.
}
答案 0 :(得分:8)
我真的,真的不推荐这个...
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电子市场获得错误报告。
您可以使用UncaughtExceptionHandler来防止一些崩溃。我使用一个,但仅用于将堆栈跟踪打印到文件,因为我正在远离计算机的手机上调试应用程序。但是在我完成之后,我将未捕获的异常传递给默认的Android UncaughtExceptionHandler,因为我希望Android能够正确处理它,并让用户有机会向我发送堆栈跟踪。
答案 1 :(得分:2)
检查你的捕捉表达
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子句中初始化变量,并在您的activity方法中检查该变量的值。
喜欢这个
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
}
}
答案 2 :(得分:1)
从res返回默认位图。但是有一个非常好的库用于处理名为Universal Image Loader的位图,请查看它。
答案 3 :(得分:0)
转而使用getBitmap
方法中的异常并让客户端(Activity)处理异常,在这种情况下,您会收到位图或异常,并且可以跳过return null
位图并执行根据catch块中的“default bitmap loading”,代之以异常/错误情况(因为现在这是空的情况)。
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);
}
答案 4 :(得分:0)
// try is nothing but a way to communicate a program
Example:
try{
//code here File IO operation like Files
// Code here Network Operation
//code here /0 (Divide by Zero )
}catch (Exception e) {
Log.e("Fail 2", e.toString());
//At the level Exception Class handle the error in Exception Table
// Exception Create That Error Object and throw it
//E.g: FileNotFoundException ,etc
e.printStackTrace();
}finally {
//it always execute
}