Nibha Jain
Nibha Jain

Reputation: 8161

Getting Force close /crash while fetching the data from webservice

I am using the following code in Async-task ,for parsing a web-service and showing the results in the map (In HTC desire s ,real device)..

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(); 

}

code works fine..but in low network application force closed and i got he following error:

     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

)

and

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)

How to handle these errors?

Upvotes: 0

Views: 638

Answers (1)

Ted Hopp
Ted Hopp

Reputation: 234847

When you get an exception when making the connection, there's probably very little point in continuing the background task. Your catch blocks should probably return some sort of error indication. Instead they fall through and doInBackground continues executing, causing the NullPointerException.

Upvotes: 1

Related Questions