Android 禁用wifi时AsyncTask出错
我正在解析我的应用程序中的rss源,并尝试在加载rss时使用进度条。这是我第一次使用AsyncTask。当我按下rss按钮时,对话框出现,并在rss加载时停止。因此,它正在工作。但是,我从日志中检查,当wifi关闭时,我收到以下错误:Android 禁用wifi时AsyncTask出错,android,rss,android-asynctask,Android,Rss,Android Asynctask,我正在解析我的应用程序中的rss源,并尝试在加载rss时使用进度条。这是我第一次使用AsyncTask。当我按下rss按钮时,对话框出现,并在rss加载时停止。因此,它正在工作。但是,我从日志中检查,当wifi关闭时,我收到以下错误: 06-22 19:43:16.744: ERROR/OSFP.News(2316): java.lang.RuntimeException: java.net.ConnectException: feeds.feedburner.com/209.85.146.11
06-22 19:43:16.744: ERROR/OSFP.News(2316): java.lang.RuntimeException: java.net.ConnectException: feeds.feedburner.com/209.85.146.118:80 - Network is unreachable
06-22 19:43:16.744: ERROR/OSFP.News(2316): java.lang.RuntimeException: java.lang.RuntimeException: java.net.ConnectException: feeds.feedburner.com/209.85.146.118:80 - Network is unreachable
06-22 19:43:16.744: ERROR/OSFP.News(2316): at com.example.async.DomFeedParser.parse(DomFeedParser.java:54)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at com.example.async.nea.loadFeed(nea.java:62)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at com.example.async.nea.onCreate(nea.java:51)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at android.os.Handler.dispatchMessage(Handler.java:99)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at android.os.Looper.loop(Looper.java:123)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at android.app.ActivityThread.main(ActivityThread.java:3687)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at java.lang.reflect.Method.invokeNative(Native Method)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at java.lang.reflect.Method.invoke(Method.java:507)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at dalvik.system.NativeStart.main(Native Method)
06-22 19:43:16.744: ERROR/OSFP.News(2316): Caused by: java.lang.RuntimeException: java.net.ConnectException: feeds.feedburner.com/209.85.146.118:80 - Network is unreachable
06-22 19:43:16.744: ERROR/OSFP.News(2316): at com.example.async.BaseFeedParser.getInputStream(BaseFeedParser.java:32)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at com.example.async.DomFeedParser.parse(DomFeedParser.java:26)
06-22 19:43:16.744: ERROR/OSFP.News(2316): ... 15 more
06-22 19:43:16.744: ERROR/OSFP.News(2316): Caused by: java.net.ConnectException: feeds.feedburner.com/209.85.146.118:80 - Network is unreachable
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:207)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at java.net.Socket.connect(Socket.java:1002)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:75)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1018)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:512)
06-22 19:43:16.744: ERROR/OSFP.News(2316): at com.example.async.BaseFeedParser.getInputStream(BaseFeedParser.java:30)
06-22 19:43:16.744: ERROR/OSFP.News(2316): ... 16 more
此外,我的asyncTask在按下按钮开始在我的主要活动中加载新闻时使用:
nea = (Button) findViewById(R.id.nea);
nea.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new BackgroundAsyncTask().execute();
nea.setClickable(false);
}});
//.......
public class BackgroundAsyncTask extends
AsyncTask<Void, Integer, Void> {
private ProgressDialog dialog;
int myProgress;
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
nea.setClickable(true);
dialog.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
dialog = ProgressDialog.show(main.this, "", "Loading. Please wait...", true);
myProgress = 0;
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
Intent newActivity111 = new Intent(main.this, nea.class);
startActivity(newActivity111);
return null;
}
}
不要捕获异常类
catch (Exception e) {
throw new RuntimeException(e);
}
相反,您应该优雅地处理连接错误
查看此处以了解如何正确操作:捕获并记录了预期的异常-问题是什么?因此,我的logcat中的错误没有问题?请参阅下面mibollma的答案。抛出RuntimeException不是解决问题的方法-对错误采取措施(例如显示带有错误消息的Toast弹出窗口).我使用asyncTask的方式正确吗?>@我曾尝试在catch中使用toast,但eclipse说它不用于DomFeedParser@milbollma您建议我在这里使用什么?如何捕获无法连接时可能遇到的IOError并向OnPostExecute返回错误代码我已尝试捕获(IOD异常){Log.d(“OSFP.News”,d.getMessage(),d);但是我得到的是未处理的异常类型ParserConfiguration exception您必须同时捕获…IOException和ParserConfiguration exception。对于第二个,您现在可以抛出RuntimeException,但对于第一个,则不能。
catch (Exception e) {
throw new RuntimeException(e);
}
catch (Exception e) {
throw new RuntimeException(e);
}