簡體   English   中英

沒有互聯網連接時android app強制終止

[英]android app force terminate when no internet connection

當沒有互聯網連接時,我的應用程序沒有運行,當用戶在應用程序仍在運行時關閉互聯網連接然后終止。

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

您可以創建一種方法來檢查Internet連接是否可用,

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類中執行與網絡相關的操作。

你可以把它放在所有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就會更快運行

您的應用程序正在終止,因為您沒有處理異常。

現在,您可以在打開應用程序后立即檢查互聯網連接,但這不是您問題的正確解決方案,因為您可能會丟失互聯網連接,並且會再次導致相同的異常。

所以,你必須處理異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM