私は4日前に開始したAndroid Studioで非常に珍しい問題があります。 問題は次のとおりです:wikipedia、google、yahoo、いくつかのJavaドキュメントなど、ページを読み込み(解析)しようとすると例外がスローされますが、Eclipseで同じコードを書くとすべて正常です。 だから、ここ呼び出し元のクラス(活動)からのコードは次のとおりです。Android Studio - SAXParseExceptionがウィキペディアのページにアクセスすると
public void run() {
// TODO Auto-generated method stub
try {
//Thread.sleep(60000);
URL url = new URL(httpsurl);
HttpsURLConnection https = (HttpsURLConnection)url.openConnection();
DocumentBuilder db;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
db = dbf.newDocumentBuilder();
Document doc = db.parse(https.getInputStream());
NodeList nodes = doc.getElementsByTagName("img");
System.out.println(nodes.item(0).getAttributes().getNamedItem("src").getNodeValue());
https.disconnect();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
のAndroid Studioで例外がコードからスローされます:
`new Thread(new ImgCrawlerThread("https://en.wikipedia.org/wiki/Batman_(comic_book)")).start();`
そして、ここではImgCrawlerThreadからのコードがありますDocument doc = db.parse(https.getInputSteam())
Eclipseの実行からの結果は、次のようになります。
//upload.wikimedia.org/wikipedia/en/thumb/4/4d/BatmanComicIssue1%2C1940.png/250px-BatmanComicIssue1%2C1940.png
とAndroid Studioから:
`org.xml.sax.SAXParseException: expected: /img read: a (position:END_TAG </a>@43:317 in [email protected])
System.err: at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146)
System.err: at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107)
System.err: at com.finki.filip.crawlingtest.CrawlerAsync.doInBackground(CrawlerAsync.java:61)
System.err: at com.finki.filip.crawlingtest.CrawlerAsync.doInBackground(CrawlerAsync.java:37)
System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
System.err: at java.lang.Thread.run(Thread.java:818)`
私は私にこの非合理的な問題についての合理的な意見を与えることができる人に感謝するでしょう!
ええ、私は知っている** jsoup **は良いオプションです。しかし、私の目標は、Javaにネイティブなものを使用することでした。なぜなら、多くの外部jarを使用するとアンドロイドのスタジオが終了コード-1でアプリケーションを実行できないからです(ヒープメモリが不足していると思います)。とにかく、私は** jsoup **以外のすべての外部ジャーを削除し、すべて正常に動作しています。また、「System.err:javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107)」をクリックすると、JAVA_HOMEディレクトリにあるソースとAppData AndroidStudioで使用されます。後は不要です。 –
私の意見では、問題を引き起こしているものは、C:/ ProgramFiles/Javaのものではなく、AppData/Android/platform/sourcesフォルダのDocumentBuilder.javaソースです。コード、彼らは異なっていた。もう一度言及すると、これは更新前ではなく更新後に発生しました。不思議そうですね。 –