2016-02-13 105 views
0

我是新來的Java & Android。DocumentBuilder解析異常

我想在AsyncTask的上下文中解析InputStream並得到一個異常。 我在做什麼錯?

public Integer doInBackground(String... url) 
{ 
    HttpURLConnection con = null; 
    int status = ResultStatus.STATUS_OK; 
    InputStream in = null; 

    ConnectivityManager cm = (ConnectivityManager) mainActivityContext.getSystemService(Context.CONNECTIVITY_SERVICE); 

    if (cm.getActiveNetworkInfo() == null) 
     return ResultStatus.CONNECTION_FAILED; 

    try 
    { 
     URL bank_url = new URL(url[0]); 
     con = (HttpURLConnection) bank_url.openConnection(); 
     con.getResponseCode(); 
     con.setRequestMethod("GET"); 
     con.connect(); 
     in = con.getInputStream(); 
    } 
    catch (IOException e) 
    { 
     status = ResultStatus.URL_NOT_FOUND; 
    } 
    finally 
    { 
     con.disconnect(); 
    } 

    try 
    { 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(in); <<<<----Here I get an exception 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    return status; 
} 

我收到一個異常,它出現在:Document doc = builder.parse(in);

異常輸出:

-13 14:11:26.651 13568-14118/com.course.rita.currencyexchange W/System.err: java.io.IOException: closed 
02-13 14:11:26.661 13568-13575/com.course.rita.currencyexchange W/art: Suspending all threads took: 7.999ms 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at com.android.okio.RealBufferedSource$1.read(RealBufferedSource.java:158) 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at org.kxml2.io.KXmlParser.setInput(KXmlParser.java:1642) 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:111) 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107) 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at com.course.rita.currencyexchange.ReadCurrencyRateTask.doInBackground(ReadCurrencyRateTask.java:86) 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at com.course.rita.currencyexchange.ReadCurrencyRateTask.doInBackground(ReadCurrencyRateTask.java:34) 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
02-13 14:11:26.661 13568-14118/com.course.rita.currencyexchange W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 

由於

+1

你有清單中的互聯網許可 –

回答

0

finally塊應該是後第二catch塊。

finally 
    { 
     con.disconnect(); 
    } 

由於連接將在此斷開。

+2

謝謝!我將con.disconnect()移到了最後,現在它可以工作了!你能解釋我這個嗎? Builder需要一個開放的連接來解析數據?我確定已經包含整個數據 – RRR

+0

是的,它需要。 disconnect()釋放這個連接。 – Satya