Как обрабатывать исключение try catch android

Я использую метод getBitmap для отображения изображений. Поскольку я использую это как метод, если он возвращает растровое отображение изображения, но если он возвращает ноль, поймайте исключение. Но если введенный URL-адрес также неверен, он должен обрабатывать исключение FileNotFoundException. Как обрабатывать два исключения и отображать в пользовательском интерфейсе?

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

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

person Shadow    schedule 07.03.2014    source источник
comment
Невозможно обработать исключение NullPointer. Вы должны избегать нулевых экземпляров.   -  person alicanbatur    schedule 07.03.2014


Ответы (4)


Я действительно очень не рекомендую это...

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, чтобы предотвратить некоторые сбои. Я использую один, но только для печати трассировки стека в файл, когда я отлаживаю приложение на телефоне вдали от компьютера. Но после того, как я это сделал, я передаю неперехваченное исключение стандартному Android UncaughtExceptionHandler, потому что я хочу, чтобы Android мог правильно его обработать и дать пользователю возможность отправить мне трассировку стека.

person Jebasuthan    schedule 07.03.2014
comment
да @Jeba, вы правы. Я тоже искал uncaughtExceptionHandler, но я не знаю, как использовать его между обслуживанием и деятельностью. Поскольку этот метод находится в эксплуатации, и вы хотите обработать его в действии. Как я и думал, не использовать try catch. Но я не знаю, как это использовать и обращаться. - person Shadow; 07.03.2014

Верните растровое изображение по умолчанию из вашего файла res. Но есть очень хорошая библиотека для работы с растровым изображением Universal Image Loader, попробуйте.

person user3057944    schedule 07.03.2014

Проверьте свои выражения catch

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

        }

        }
person Jitender Dev    schedule 07.03.2014
comment
k.. постараюсь дать вам знать @Brontok - person Shadow; 07.03.2014

Вместо этого выбрасывайте исключения из метода getBitmap и позвольте клиенту (Activity) обрабатывать исключения, в этом случае либо вы получаете растровое изображение, либо исключение и можете пропустить растровое изображение return 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);
}
person Magnus    schedule 08.03.2014