我正在使用SAXParserFactory和XML阅读器从API获取。但有时当互联网连接断开时,它会卡住并且应用程序崩溃。
我对异常处理的概念并不是那么好。我希望停止该操作,并希望在连接失败时显示自定义消息。
答案 0 :(得分:1)
您可以执行类似
的操作try {
... do the IO and SAX parsing
} catch (Exception e) {
Toast.makeToast(context, "Failure: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
话虽如此:在Android 3及更高版本中,您的网络IO需要处于后台任务(当您在UI线程中执行网络IO时,系统将终止您的应用程序),因此您需要将io置于background,根据定义,无法访问UI。
这里的模式(伪代码)可以提供帮助:
class MyAsyncTask extends AsyncTask {
String doInBackground() {
try {
... do IO / parsing
}
catch (Exception e) {
return e.getMessage();
}
return "ok";
}
onPostExecute(String in) {
Toast.makeToas(... in ... );
}
}
答案 1 :(得分:0)
以下是一个示例代码,详细说明了如何在Android中执行网络通信:
try {
url = new URL(ForumURL);
URLConnection connection = url.openConnection();
//Set connection time out to 10 secs
HttpURLConnection httpConnection = (HttpURLConnection) connection;
httpConnection.setConnectTimeout(10*1000);
int responseCode = httpConnection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK)
{
InputStream in = httpConnection.getInputStream();
DocumentBuilderFactory dbf;
dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse(in);
} //You can put an else condition here, if you want to process any error situations.
} catch (Exception e) {
//Your exception handler code here.
return;
}//catch (Exception e)
谨慎一点。在Android中执行网络通信时,make是使用单独的线程进行的,而不是来自主UI线程。原因是,如果您在慢速网络上执行网络操作,Android操作系统将使用ANR终止您的应用程序。