如何处理try catch异常android

时间:2014-03-07 11:02:34

标签: android exception-handling bitmap out-of-memory filenotfoundexception

我使用方法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.
        }          

5 个答案:

答案 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
    }