【问题标题】:DocumentBuilder parse exceptionDocumentBuilder 解析异常
【发布时间】:2016-05-24 14:54:13
【问题描述】:

我是 Java 和 Android 的新手。

我试图在 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)

谢谢

【问题讨论】:

  • 您是否在清单中授予了 Internet 权限

标签: java android android-asynctask xml-parsing


【解决方案1】:

finally 块应该在第二个 catch 块之后。

finally
    {
        con.disconnect();
    }

因为这里会断开连接。

【讨论】:

  • 谢谢!!!我将 con.disconnect() 移到最后,它现在可以工作了!你能解释一下吗? Builder 需要一个开放的连接来解析数据?我确信 in 已经包含了全部数据
  • 是的,它需要。 disconnect() 释放此连接。
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 2011-09-30
  • 2013-06-25
  • 2014-01-11
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
相关资源
最近更新 更多