gpt4 book ai didi

android - 从 Web 服务获取数据时强制关闭/崩溃

转载 作者:行者123 更新时间:2023-12-01 21:48:48 25 4
gpt4 key购买 nike

我在异步任务中使用以下代码,用于解析网络服务并在 map 中显示结果(在 HTCdesire s,真实设备中)..

protected Void doInBackground(Void... params) {

try {

/** Handling XML */
spf = SAXParserFactory.newInstance();
sp = spf.newSAXParser();
xr = sp.getXMLReader();

String response = doGet("http://www.abc.com");

myXMLHandler = new MyXMLHandler();
xr.setContentHandler(myXMLHandler);
//xr.parse(new InputSource(sourceUrl.openStream()));
xr.parse(new InputSource(new StringReader(response)));

}
catch (UnknownHostException e) {
e.printStackTrace();
}
catch (NullPointerException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

markerssList = MyXMLHandler.markerList;
mapOverlays_results =mapView.getOverlays();
mapOverlays_results.remove(itemizedOverlay);

if(markerssList.getLatitude().size()>0)
{
Drawable drawable = HSLoc_tabActivity.this.getResources().getDrawable(R.drawable.flag);
itemizedOverlay = new CustomItemizedOverlay(drawable, HSLoc_tabActivity.this);
for (int i = 0; i < markerssList.getLatitude().size(); i++) {

ss1 = markerssList.getLatitude().get(i);
ss2 = markerssList.getLongitude().get(i);
ss3 = markerssList.getName().get(i);
ss4 = markerssList.getAddress().get(i);
ss5 = markerssList.getCity().get(i);
markerssList.getPostal_code().get(i);

try
{
p = new GeoPoint((int) (Double.parseDouble(ss1) * 1E6),
(int) (Double.parseDouble(ss2) * 1E6));
overlayItem = new OverlayItem(p, " ",
""+ss3+"\n"+ss4+"\n"+ss5);
itemizedOverlay.addOverlay(overlayItem);

}
catch(NullPointerException e1)
{

}

}
mapOverlays_results.add(itemizedOverlay);
//mapView.getOverlays().add(itemizedOverlay);
mapController = mapView.getController();
mapController.animateTo(p);
mapController.setZoom(12);
mapView.postInvalidate();

}

代码工作正常..但在低网络应用程序强制关闭时,我收到以下错误:

     01-02 13:41:29.222: WARN/System.err(6562): java.net.UnknownHostException: www.abc.com.au
01-02 13:41:29.222: WARN/System.err(6562): at java.net.InetAddress.lookupHostByName(InetAddress.java:509)
01-02 13:41:29.232: WARN/System.err(6562): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:297)
01-02 13:41:29.232: WARN/System.err(6562): at java.net.InetAddress.getAllByName(InetAddress.java:256)
01-02 13:41:29.232: WARN/System.err(6562): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
01-02 13:41:29.232: WARN/System.err(6562): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
01-02 13:41:29.232: WARN/System.err(6562): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
01-02 13:41:29.232: WARN/System.err(6562): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359

)

01-02 13:41:29.312: ERROR/AndroidRuntime(6562): FATAL EXCEPTION: AsyncTask #2
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): java.lang.RuntimeException: An error occured while executing doInBackground()
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at java.lang.Thread.run(Thread.java:1027)
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): Caused by: java.lang.NullPointerException
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at com.app.LocatorApp.HSLoc_tabActivity$backgroundLoadResults.doInBackground(HSLoc_tabActivity.java:545)
01-02 13:41:29.312: ERROR/AndroidRuntime(6562): at com.app.LocatorApp.HSLoc_tabActivity$backgroundLoadResults.doInBackground(HSLoc_tabActivity.java:1)

如何处理这些错误?

最佳答案

当建立连接时出现异常时,继续后台任务可能没有什么意义。您的 catch block 可能应该返回某种错误指示。相反,它们会失败,并且 doInBackground 继续执行,导致 NullPointerException。

关于android - 从 Web 服务获取数据时强制关闭/崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8698736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com