Android 未知主机异常
我有以下代码,如果未连接到互联网,则会发生问题,但会因主题中的错误而使应用程序崩溃。有没有一种优雅的方法来检测连接是否已建立或只是忽略它?
try {
GeoPoint center = myMapView.getMapCenter();
double minLat = (double) (center.getLatitudeE6() - (myMapView
.getLatitudeSpan() / 2)) / 1E6;
double maxLat = (double) (center.getLatitudeE6() + (myMapView
.getLatitudeSpan() / 2)) / 1E6;
double minLng = (double) (center.getLongitudeE6() - (myMapView
.getLongitudeSpan() / 2)) / 1E6;
double maxLng = (double) (center.getLongitudeE6() + (myMapView
.getLongitudeSpan() / 2)) / 1E6;
/* Create a URL we want to load some xml-data from. */
URL url = new URL(
"http://www.test.com/feed.asp?maxlat="
+ Double.toString(maxLat) + "&maxlon="
+ Double.toString(maxLng) + "&minlat="
+ Double.toString(minLat) + "&minlon="
+ Double.toString(minLng));
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = sp.getXMLReader();
/* Create a new ContentHandler and apply it to the XML-Reader */
XMLHandler myXMLHandler = new XMLHandler();
xr.setContentHandler(myXMLHandler);
/* Parse the xml-data from our URL. */
xr.parse(new InputSource(url.openStream()));
/* Parsing has finished. */
/* Our ExampleHandler now provides the parsed data to us. */
/*
* ParsedExampleDataSet parsedExampleDataSet =
* myExampleHandler.getParsedData();
*/
ArrayList<Ship> shipArray = myXMLHandler.getShipArray();
ArrayList<pfOverlayItem> overArray = myXMLHandler.getOverlayArray();
mainOverlayArray = overArray;
pfOverlayItem tempOver = null;
Drawable marker = null;
for (int i = 0; i < mainOverlayArray.size(); i++) {
tempOver = mainOverlayArray.get(i);
// tempOver.setMarker(getIcon(tempOver.getshipTypeInt()));
tempOver.setMarker(getPlaneIcon(tempOver.getcourse()));
}
sites = new SitesOverlay();
} catch (Exception e) {
/* Display any Error to the GUI. */
Log.e("Error", "Problem processing XML", e);
}
I have the following code that if not connected to the internet hits the catch but crashes the app with the error in the subject. Is there a graceful way to detect the connection being up or just ignore this?
try {
GeoPoint center = myMapView.getMapCenter();
double minLat = (double) (center.getLatitudeE6() - (myMapView
.getLatitudeSpan() / 2)) / 1E6;
double maxLat = (double) (center.getLatitudeE6() + (myMapView
.getLatitudeSpan() / 2)) / 1E6;
double minLng = (double) (center.getLongitudeE6() - (myMapView
.getLongitudeSpan() / 2)) / 1E6;
double maxLng = (double) (center.getLongitudeE6() + (myMapView
.getLongitudeSpan() / 2)) / 1E6;
/* Create a URL we want to load some xml-data from. */
URL url = new URL(
"http://www.test.com/feed.asp?maxlat="
+ Double.toString(maxLat) + "&maxlon="
+ Double.toString(maxLng) + "&minlat="
+ Double.toString(minLat) + "&minlon="
+ Double.toString(minLng));
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = sp.getXMLReader();
/* Create a new ContentHandler and apply it to the XML-Reader */
XMLHandler myXMLHandler = new XMLHandler();
xr.setContentHandler(myXMLHandler);
/* Parse the xml-data from our URL. */
xr.parse(new InputSource(url.openStream()));
/* Parsing has finished. */
/* Our ExampleHandler now provides the parsed data to us. */
/*
* ParsedExampleDataSet parsedExampleDataSet =
* myExampleHandler.getParsedData();
*/
ArrayList<Ship> shipArray = myXMLHandler.getShipArray();
ArrayList<pfOverlayItem> overArray = myXMLHandler.getOverlayArray();
mainOverlayArray = overArray;
pfOverlayItem tempOver = null;
Drawable marker = null;
for (int i = 0; i < mainOverlayArray.size(); i++) {
tempOver = mainOverlayArray.get(i);
// tempOver.setMarker(getIcon(tempOver.getshipTypeInt()));
tempOver.setMarker(getPlaneIcon(tempOver.getcourse()));
}
sites = new SitesOverlay();
} catch (Exception e) {
/* Display any Error to the GUI. */
Log.e("Error", "Problem processing XML", e);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
从 URL 流中解析 XML 似乎是一个可怕的想法。为什么不完全获取流,然后解析它呢?
<代码>
Parsing XML from a URL stream seems like a horrible idea. Why don't you get the stream completely, then parse it?
我用它来检查互联网
I use this to check for Internet
正如 metric152 提到的,新用户很容易错过在清单中添加正确的权限!
在这种情况下,添加
对我来说很神奇!As metric152 mentioned, a new user can easily miss adding the correct permissions in the manifest!
In this case, adding
<uses-permission android:name="android.permission.INTERNET" />
did the magic for me!