代码之家  ›  专栏  ›  技术社区  ›  Lee Armstrong

StringBuilder的NullPointerException

  •  0
  • Lee Armstrong  · 技术社区  · 15 年前

    我想我的尝试,接球会处理好的。

    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)
    

    第759行在grabPlaneRoute中,是包含“StringBuilder total=new StringBuilder();”的行

    有人能帮个忙吗,快把我逼疯了!:-)

    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);
    
    
    }
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   Cristian    15 年前

    对我来说这是不可能的 StringBuilder total = new StringBuilder(); 引起 NullPointerException . 另一方面,导致异常的最接近的原因是日志跟踪:

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

    这让我觉得是因为:

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

    在这种情况下,唯一可以为null的是 is .

        2
  •  4
  •   Michael Petrotta user3140870    15 年前

    第759行实际上是以 BufferedReader r = new ...

    变量 is 为空。

    什么时候会发生 con.GetInputStream

    此外,我认为根本没有必要使用etry/catch块。只是让异常渗透到调用堆栈中。你在隐瞒真相 IOException grabPlaneRoute 从发现一个错误发生。