How to handle try catch exception android
Asked Answered
E

5

14

I am using a method getBitmap to display images. As I am using this as a method,if it returns bitmap display an image but if it returns null,catch an exception. But if url entered is wrong also, it should handle the FileNotFoundException. How to handle two exception and display in 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;
        }
        }

In Activity, i've given like this

    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.
        }          
Ensoul answered 7/3, 2014 at 11:2 Comment(1)
There is no way to handle NullPointer Exception. You must avoid null instances.Weiman
C
16

I really, really don't recommend this...

try {
     ...
} catch (Exception e) {
     // This will catch any exception, because they are all descended from Exception
     System.out.println("Error " + e.getMessage());
     return null;
}

Are you looking at your stack traces to debug your issues? It should not be hard to track them down. Look at LogCat and review the big block of red text to see which method caused your crash and what your error was.

If you catch all your errors this way, your program is not going to behave as expected, and you will not get error reports from Android Market when your users report them.

You can use an UncaughtExceptionHandler to possibly prevent some crashes. I use one, but only to print stack traces to a file, for when I'm debugging an app on a phone away from my computer. But I pass on the uncaught exception to the default Android UncaughtExceptionHandler after I've done that, because I want Android to be able to handle it correctly, and give the user the opportunity to send me a stack trace.

Carty answered 7/3, 2014 at 11:15 Comment(1)
yes @Jeba you are right.i looked for uncaughtExceptionHandler too but i don't know how to use in between service and activity. As this method is in service and want to handle that in activity. As my thought was to not to use try catch. But i don't know how to use that and handle.Ensoul
A
3

Check your catch expressions

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;
    }

Here you are returning null in both exceptions, My suggestion is initialize a variable in these catch clauses and in your activity method check the value of that variable.

Like this

 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;
        }

Now in your activity

 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

        }

        }
Antedate answered 7/3, 2014 at 11:7 Comment(1)
k..will try and let you know @BrontokEnsoul
R
2

Return a default bitmap from your res. But there is a very good library for working with bitmap called Universal Image Loader, check it out.

Retinue answered 7/3, 2014 at 11:7 Comment(0)
O
1

Throw the exceptions from the getBitmap method instead and let the client (Activity) handle the exceptions, in this case either you receive a Bitmap or an exception and can skip the return null bitmap and do the according "default bitmap loading" in the catch blocks, for the exception/error case instead (since this is the null case now).

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);
}
Ovolo answered 8/3, 2014 at 12:23 Comment(0)
T
1
// 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
    }
Tessera answered 14/3, 2020 at 8:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.