J'essaye d'analyser un XML à partir d'Internet et d'afficher certaines de ses données dans un simple TextView. Voici mon code:SAXParseException: jeton inattendu lors d'une tentative d'analyse XML à distance sur Android
public class MainActivity extends AppCompatActivity {
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.textView1);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
String UTF8 = "utf-8";
URL url = new URL("http://pollenapps.com/AllergyAlertWebSVC/api/1.0/Forecast/ForecastForZipCode?Zipcode=02145&Affiliateid=9642&AppID=2.1.0&uid=6693636764.xml");
URLConnection urlConnection = url.openConnection();
//InputStream in = new BufferedInputStream(urlConnection.getInputStream());
//BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
//InputStream in = new URL("http://pollenapps.com/AllergyAlertWebSVC/api/1.0/Forecast/ForecastForZipCode?Zipcode=02145&Affiliateid=9642&AppID=2.1.0&uid=6693636764.xml").openStream();
//getAssets().open("file.xml");
InputStream in = url.openStream();
//InputStream is2 = new FileInputStream(file);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
//Document doc = dBuilder.parse(new InputSource(new InputStreamReader(in, "UTF-8")));
Document doc = dBuilder.parse(in, "UTF-8");
//Document doc = dBuilder.parse(in);
Element element = doc.getDocumentElement();
element.normalize();
NodeList nList = doc.getElementsByTagName("allergyForecast");
for (int i=0; i<nList.getLength(); i++) {
Node node = nList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element2 = (Element) node;
tv1.setText(getValue("Day0", element2));
}
}
} catch (Exception e) {e.printStackTrace();}
}
private static String getValue(String tag, Element element) {
NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = nodeList.item(0);
return node.getNodeValue();
}
}
Ce code fonctionne comme prévu quand je le lance sur un fichier local (un de ceux félicité sur InputStreams est un fichier local) mais lorsque je tente de l'exécuter sur le fichier XML à partir Internet, je reçois l'erreur suivante:
07-04 12:58:06.550 23289-23289/mystikos.pollentest W/System.err: org.xml.sax.SAXParseException: Unexpected token (position:TEXT {"[email protected]:990 in [email protected])
sur la base des recherches, il semble que l'analyseur ne peut pas dire quel type de codage du fichier XML a, donc je dois le définir. Cependant, je ne suis pas sûr de savoir comment le définir ici ... mes tentatives pour définir l'encodage "UTF-8" sont visibles dans les lignes commentées, mais cela n'a pas fonctionné. Aucune suggestion?
Merci!