2014-12-24 3 views
3

Когда нет подключения к Интернету, мое приложение не работает и когда пользователь закрывает интернет-соединение, пока приложение все еще работает, оно завершается. Классандроид приложение силы прекратить, когда нет подключения к Интернету

protected void onHandleIntent(Intent intent) 
{ 

    Log.d(Constants.TAG, "Service started"); 

    List<RssItem> rssItems = null ; 
    try { 
     PcWorldRssParser parser = new PcWorldRssParser(); 
     if(flag == 0) { 
      rssItems = parser.parse(getInputStream(RSS_LINK)); 
     } 
     else if(flag == 2){ 
      rssItems = parser.parse(getInputStream(RSS_LINK2)); 
     } 
     else if(flag == 3){ 
      rssItems = parser.parse(getInputStream(RSS_LINK3)); 
     } 
     else if(flag == 4){ 
      rssItems = parser.parse(getInputStream(RSS_LINK4)); 
     } 
     else if(flag == 5){ 
      rssItems = parser.parse(getInputStream(RSS_LINK5)); 
     } 
     else if(flag == 6){ 
      rssItems = parser.parse(getInputStream(RSS_LINK6)); 
     } 
     else if(flag == 7){ 
      rssItems = parser.parse(getInputStream(RSS_LINK7)); 
     } 
     else if(flag == 8){ 
      rssItems = parser.parse(getInputStream(RSS_LINK8)); 
     } 
     else if(flag == 9){ 
      rssItems = parser.parse(getInputStream(RSS_LINK9)); 
     } 
    } catch (XmlPullParserException e) { 
     Log.w(e.getMessage(), e); 
    } catch (IOException e) { 
     Log.w(e.getMessage(), e); 
    } 
    Bundle bundle = new Bundle(); 
    bundle.putSerializable(ITEMS, (Serializable) rssItems); 
    ResultReceiver receiver = intent.getParcelableExtra(RECEIVER); 
    receiver.send(0, bundle); 
} 

RssParser:

public List<RssItem> parse(InputStream inputStream) throws XmlPullParserException, IOException { 
    try { 
     XmlPullParser parser = Xml.newPullParser(); 
     parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 
     parser.setInput(inputStream, null); 
     parser.nextTag(); 
     return readFeed(parser); 

    } finally { 

     inputStream.close(); 

    } 
} 

В этих двух методах я получаю NullPointerException по адресу:

inputStream.close(); 
rssItems = parser.parse(getInputStream(RSS_LINK)); 
+3

Просто замените все, если/другое на переключатель/случай – Suvitruf

ответ

1

Вы можете поместить это все ваши else ifs

try { 
       rssItems = parser.parse(getInputStream(RSS_LINK)); 
      }catch (XmlPullParserException e){ 
       throw new RuntimeException("Error"+ e.getMessage()); 
      }catch (IOException e){ 
       throw new RuntimeException("Error"+ e.getMessage()); 
      }catch (NullPointerException e){ 
       Log.d("Error in RSS_LINK",""); 
      } 

Вам нужен код выше, чтобы обрабатывать все возможные исключения должным образом.

Кроме того, вы должны изменить свой if else if код на switch case поскольку у вас есть много else ifs с постоянными проверками было бы проще читать и быстрее работать, если вы преобразовать их в switch case советы

1

Вы можете создать метод, чтобы проверить, если подключение к Интернету или нет,

private boolean isNetworkAvailable() { 
    ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = manager.getActiveNetworkInfo(); 

    boolean isAvailable = false; 
    if (networkInfo != null && networkInfo.isConnected()) { 
     isAvailable = true; 
    } 
    return isAvailable; 
} 

Если Интернет,

if (isNetworkAvailable()) { 
      // Do your stuff here. 
     } 
else { 
} 

Совет: выполнить сетевую операцию, связанную в AsycnTask классе.

0

Ваше приложение заканчивается, потому что вы не обрабатываете исключение.

Теперь вы можете проверить подключение к Интернету сразу после открытия приложения, но это не является правильным решением вашей проблемы, потому что вы можете потерять подключение к Интернету между ними, и одно и то же исключение будет вызвано снова.

Итак, вы должны обработать исключение.

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