当没有互联网连接时,我的应用程序没有运行,当用户在应用程序仍在运行时关闭互联网连接时,它会终止。
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));
答案 0 :(得分: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课程中执行与网络相关的操作。
答案 1 :(得分: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
进行常量检查,如果将其转换为{{{{}},则更容易阅读并且运行速度更快1}}
答案 2 :(得分:0)
您的应用已终止,因为您没有处理异常。
现在,您可以在打开应用程序后立即检查互联网连接,但这不是您问题的正确解决方案,因为您可能会丢失互联网连接,并会再次导致相同的异常。
所以,你必须处理异常。