web-dev-qa-db-fra.com

Comment gérer essayez catch exception android

J'utilise une méthode getBitmap pour afficher des images. Comme je l’utilise comme méthode, si elle retourne une image bitmap, mais si elle renvoie null, attrapez une exception. Mais si l'URL entrée est également incorrecte, il devrait gérer l'exception FileNotFoundException. Comment gérer deux exceptions et les afficher dans l'interface utilisateur?

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

En activité, j'ai donné comme ça

    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.
        }          
7
Shadow

Je ne recommande vraiment pas vraiment cela ...

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

Examinez-vous vos traces de pile pour déboguer vos problèmes? Il ne devrait pas être difficile de les retrouver. Regardez LogCat et examinez le gros bloc de texte rouge pour voir quelle méthode a causé votre blocage et quelle est votre erreur.

Si vous détectez toutes vos erreurs de cette manière, votre programme ne se comportera pas comme prévu et vous ne recevrez pas de rapports d'erreur sur Android Market lorsque vos utilisateurs les signaleront.

Vous pouvez utiliser un UncaughtExceptionHandler pour éventuellement empêcher certains plantages. J'en utilise un, mais uniquement pour imprimer les traces de pile dans un fichier, par exemple lorsque je débogue une application sur un téléphone, loin de mon ordinateur. Mais je répète l’exception non capturée à la commande par défaut Android UncaughtExceptionHandler, car je veux qu’Android puisse la gérer correctement et donner à l’utilisateur l’opportunité de m'envoyer une trace de pile.

7
Jeba

Vérifiez vos expressions de capture

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

Ici, vous retournez null dans les deux exceptions, ma suggestion est initialisez une variable dans ces clauses de capture et dans votre méthode d’activité, vérifiez la valeur de cette variable.

Comme ça

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

Maintenant dans votre activité

 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
Jitender Dev

Renvoie un bitmap par défaut de votre res. Mais il existe une très bonne bibliothèque pour travailler avec bitmap appelée Universal Image Loader, consultez-la.

1
user3057944

Lancez les exceptions de la méthode getBitmap à la place et laissez le client (Activity) gérer les exceptions. Dans ce cas, vous recevez un bitmap ou une exception, vous pouvez ignorer le bitmap return null et effectuer le "chargement du bitmap par défaut" correspondant dans les blocs catch. pour le cas exception/erreur à la place (puisqu'il s'agit maintenant du cas nul).

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);
}
0
Magnus