J'ai ce fichier .xml avec les pays et leurs codes de pays dans eux. Voici à quoi cela ressemble:Analyser XML et l'afficher dans un AlertDialog dans Android
<?xml version="1.0" encoding="UTF-8"?>
<landen>
<land>
<naam>Afghanistan</naam>
<code>AF</code>
</land>
<land>
<naam>Albani�</naam>
<code>AL</code>
</land>
<land>
<naam>Algerije</naam>
<code>DZ</code>
</land>
<land>
</landen>
Maintenant, je veux que les gens choisissent un pays dans une liste. Je pense qu'un AlertDialog serait bien d'afficher tout.
La façon dont je reçois les valeurs de mon fichier XML est comme ceci:
protected ArrayList<Land> getLanden() {
ArrayList<Land> lijst = new ArrayList<Land>();
try {
DocumentBuilder builder =DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(getAssets().open("landenlijst.xml"));
NodeList nl = doc.getElementsByTagName("land");
for (int i=0;i<nl.getLength();i++) {
Node node = nl.item(i);
Land land = new Land();
land.land = Xml.innerHtml(Xml.getChildByTagName(node, "naam"));
land.landcode = Xml.innerHtml(Xml.getChildByTagName(node, "code"));
lijst.add(land);
}
Log.d("Gabug","Klaar met parsen");
Log.d("Gabug","Landen: " + lijst);
} catch (Exception e) {
e.printStackTrace();
}
return lijst;
}
Et je l'utiliser pour faire mon AlertDialog:
public void KiesLandMenu(){
ArrayList<Land> alleLanden = getLanden();
final CharSequence[] items = alleLanden.toArray(new CharSequence[alleLanden.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Kies land");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch (item){
case 0:
break;
case 1:
break;
case 2:
break;
}
}
});
AlertDialog alert = builder.create();
alert.show();
}
Je ne sais pas si cela fonctionne comme DDMS retourne un bytecode ou quelque chose quand je le connecte. Et après cela, Force se ferme à cause de ArrayStoreException ..
Maintenant, ma question est; Est-ce la meilleure façon de faire cela? Si oui, comment puis-je corriger l'exception ArrayStoreException? Si non, quelles sont les meilleures façons de laisser mon utilisateur choisir un pays (une toute nouvelle vue peut-être)? En outre, comment puis-je enregistrer le pays dans lequel quelqu'un s'est engagé?
EDIT:
Je légèrement changé l'exemple de code ci-dessous et je reçois un NullPointerException maintenant ..
public void KiesLandMenu(){
ArrayAdapter<Land> arrAdapter;
ArrayList<Land> alleLanden = getLanden();
arrAdapter = new ArrayAdapter<Land>(this, android.R.layout.simple_list_item_single_choice, alleLanden);
ListView list = (ListView)findViewById(R.layout.lijstview);
list.setAdapter(arrAdapter);
list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View view, int position,
long id) {
Log.e("item clicked", String.valueOf(position));
}
});
}
Le NullPointerException est à list.setAdapter(arrAdapter);
(ListView) findViewById (R.layout.lijstview) est de retour nul. C'est R.id.lijstview. – techiServices
J'ai créé lijstview.xml dans le dossier layout, et cela ne me donne pas d'erreur dans Eclipse. Alors que cela me donne une erreur quand je mets R.id.lijstview là. – Galip
Vous devez configurer votre disposition dans onCreate en premier. Je vais modifier ma réponse ci-dessous. – Zarah