Ich habe ein sehr ungewöhnliches Problem mit Android Studio, die vor 4 Tagen begann (ich nehme nach dem Update). Das Problem ist: Die Ausnahme wird geworfen, wenn versucht wird, jede Seite zu lesen (parsen), ob es Wikipedia, Google, Yahoo, einige Java-Dokumentation ... ist, aber wenn ich den gleichen Code in Eclipse schreibe, funktioniert alles gut. So, hier ist der Code von der anrufenden Klasse (Aktivität):Android Studio - SAXParseException beim Zugriff auf Wikipedia-Seite
`new Thread(new ImgCrawlerThread("https://en.wikipedia.org/wiki/Batman_(comic_book)")).start();`
Und hier ist der Code aus dem ImgCrawlerThread:
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();
}
}
Die Ausnahme in Android Studio aus dem Code ausgelöst wird: Document doc = db.parse(https.getInputSteam())
Das Ergebnis aus der Eclipse-Ausführung sieht wie folgt aus:
//upload.wikimedia.org/wikipedia/en/thumb/4/4d/BatmanComicIssue1%2C1940.png/250px-BatmanComicIssue1%2C1940.png
Und aus dem 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)`
Ich würde jedem dankbar sein, den mir eine vernünftige Meinung zu diesem irrationalen Problem geben könnte !!!
Ja, ich weiß, dass ** jsoup ** eine gute Option ist. Aber mein Ziel war es, etwas zu verwenden, das in Java nativ ist, weil, wenn ich viele externe Gläser benutze, Android Studio die Anwendung mit dem Exit-Code -1 nicht ausführen kann (ich nehme an, wegen eines Mangels an Heap-Speicher). Wie auch immer, ich löschte alle meine externen Gläser außer ** jsoup ** und alles funktioniert gut. Außerdem habe ich festgestellt, dass ich, wenn ich auf "System.err: at javax.xml.parsers.DocumentBuilder.parse (DocumentBuilder.java:107)" klicke, zwei Quellen erhalte: die eine im Verzeichnis JAVA_HOME und die andere in AppData Wird von AndroidStudio verwendet. Letzteres ist unnötig. –
Meiner Meinung nach ist das, was das Problem verursacht, die Quelle DocumentBuilder.java im Ordner AppData/Android/platform/sources und nicht in C:/ProgramFiles/Java, weil ich die beiden Teile von Code, sie waren anders. Und um noch einmal zu erwähnen, das passierte nach dem Update, vorher nicht. Seltsam, nicht wahr? –