2015-01-06 6 views
0

У меня есть работа в Интернете, которая читает строку из онлайн-файла. Он находится в блоке try-catch. Когда выполнение завершается с ошибкой (например, для отсутствующего подключения к Интернету), операция переходит к блоку catch и приложение падает. Как я могу избежать сбоев?Избегайте сбой приложения при сбое Исключение

try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader((new URL(MegaMethods.url+params[0])).openStream()), 8192); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      count++; 
     } 
     reader.close(); 
    } 
    catch (Exception e){ 
    // Here I want to do something to avoid app crash 
    } 
+1

Это не сбой из-за положения catch. Это может привести к сбою из-за последующих строк кода, который пытается сделать что-то на основе результата сервера. – Prem

+0

@Prem Это сбой, потому что, если у меня нет интернета, будет проблема с файлом, он не найдет файл или не сможет разрешить URL-адрес, поэтому он перетекает в catch. Когда у меня есть доступ к уловам, я могу избежать краха приложения? – ClearCode

+0

Что вы хотите, чтобы приложение выполнялось в этом сценарии? – JamesB

ответ

1

Попробуйте проверить, есть ли у устройства сетевое подключение, прежде чем пытаться извлечь файл. Если сеть не найдена, избегайте задачи.

Образец кода - Вызовите этот метод. Если он вернётся, сеть доступна.

public boolean isNetworkAvailable() { 
    boolean status=false; 
    try{ 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getNetworkInfo(0); 
     if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) { 
      status= true; 
     }else { 
      netInfo = cm.getNetworkInfo(1); 
      if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED) 
       status= true; 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
     return false; 
    } 
    return status; 

    } 

Кроме того, я согласен с вами в том, что по какой-то причине приложение может генерировать исключение и достигает блока Catch. Но учтите, что даже если блок catch пуст, это не приведет к сбою вашего приложения.

Приложение может потерпеть крах из-за некоторого кода вне блока catch try.

+0

Спасибо, но мое приложение работает с Интернетом! Я не хочу проверять Интернет, потому что что-то может пойти не так, как работает AsyncTask, к сожалению, интернет может спуститься во время загрузки из Интернета, поэтому я предпочитаю что-то делать после получения ответа на ошибку – ClearCode

+0

@ClearCode. В этом случае вам нужно ничего не делать, чтобы избежать сбоя приложения в блоке catch. Надеюсь, это ответит на ваши сомнения. – Prem

+0

Теперь я понимаю, что проблема, вероятно, вызвана возвращаемым значением, я выполняю другие операции, поэтому, если «попробуй» не пойдет так, как будто я хочу, чтобы это привело к сбою приложения. Спасибо огромное! – ClearCode

Смежные вопросы