2010-10-04 7 views
0

Je reçois un plantage très commun ci-dessous à partir du code ci-dessous.NullPointerException avec StringBuilder

Je pensais que mon essai, les captures auront géré cela.

java.lang.RuntimeException: An error occured while executing doInBackground() 
at android.os.AsyncTask$3.done(AsyncTask.java:200) 
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
at java.lang.Thread.run(Thread.java:1102) 
Caused by: java.lang.NullPointerException 
at java.io.Reader.<init>(Reader.java:65) 
at java.io.InputStreamReader.<init>(InputStreamReader.java:65) 
at com.test.test.FinderMain.grabPlaneRoute(FinderMain.java:759) 
at com.test.test.FinderMain.access$7(FinderMain.java:729) 
at com.test.test.FinderMain$GetRouteTask.doInBackground(FinderMain.java:684) 
at com.test.test.FinderMain$GetRouteTask.doInBackground(FinderMain.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:185) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 

ligne 759 est à l'intérieur de grabPlaneRoute et la ligne contenant le "StringBuilder totale = new StringBuilder();" Est-ce que quelqu'un peut aider avec ça, ça me rend fou! :-)

private void grabPlaneRoute(String adshex) { 


    List<GeoPoint> localList = new ArrayList<GeoPoint>(); 

    HttpURLConnection con = null; 
    URL url; 
    InputStream is=null; 
    try { 
     url = new URL("http://www.testurl.com&test=" + adshex); 

     con = (HttpURLConnection) url.openConnection(); 
     con.setReadTimeout(20000 /* milliseconds */); 
     con.setConnectTimeout(60000 /* milliseconds */); 
     con.setRequestMethod("GET"); 
     con.setDoInput(true); 

     // Start the query 
     con.connect(); 
     is = con.getInputStream(); 
    }catch (IOException e) { 
        //handle the exception ! 
     e.printStackTrace(); 
     return; 
    } 

    //localList = decodePoly(convertStreamToString(is)); 
    //Log.i("HTTP DUMP", convertStreamToString(is)); 

    BufferedReader r = new BufferedReader(new InputStreamReader(is),8024); 
    StringBuilder total = new StringBuilder(); 
    String line; 
    try { 
    while ((line = r.readLine()) != null) { 
     String[] separated = line.split(","); 

     GeoPoint p = getPoint(Double.valueOf(separated[0]),Double.valueOf(separated[1])); 
     localList.add(p); 
    } 
    }catch (IOException e) { 
     //handle the exception ! 
      e.printStackTrace(); 
    } 



    drawPlaneRoute(localList); 


} 

Répondre

2

Il est pratiquement impossible pour StringBuilder total = new StringBuilder(); de provoquer un NullPointerException. D'autre part, la plus proche cause de l'exception est dans le logtrace:

at java.io.Reader.<init>(Reader.java:65) 
at java.io.InputStreamReader.<init>(InputStreamReader.java:65) 

Ce qui me fait penser qu'il est causé par:

BufferedReader r = new BufferedReader(new InputStreamReader(is),8024); 

Dans ce cas, la seule chose qui pourrait être nulle est is.

+0

Vous avez, je suppose alors un si! = Null là et manque cette section de code? –

4

La ligne 759 est en fait la ligne qui commence par BufferedReader r = new ....

La variable is est null. Que se passe-t-il lorsque con.GetInputStream renvoie une valeur nulle et ne renvoie pas d'exception?

Vous ne gérez pas ce cas, et c'est probablement ce qui se passe ici.

En outre, je ne vois pas du tout besoin d'un bloc try/catch. Laissez simplement l'exception percoler dans la pile des appels. Vous cachez maintenant le IOException, empêchant quiconque appelant le grabPlaneRoute de découvrir qu'une erreur est survenue.

+0

Soupir ... Je déteste quand je réponds à la même chose que l'autre utilisateur quelques secondes après. Donc, je pense que vous avez raison, donc +1! – Cristian

+0

@ Christian: Eh bien, le vôtre est plus complet, donc +1 à vous. –