Bonjour à tous (et au passage bonnes fêtes!),
J'ai fait une petite application récemment en Java/Swing, et je souhaitais faire une nouvelle interface pour Android tout en gardant le coeur "calculatoire" déjà existant. Je créé donc un nouveau projet et me sert de l'existant en dépendance.
Je m'appuie sur des fichiers XML pour définir certaines des données nécessaires à mon application, et si je les lis sans problème avec Java "normal", sous Android, ça coince un peu.
Dans mon activity principale, je créé les inputstream de cette manière :
Le maker s'appuie sur un parseur SAX :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Map<String,InputStream> files = new HashMap<String,InputStream>(); try { files.put("Fichier1", getAssets().open("Fichier1.xml")); files.put("Fichier2", getAssets().open("Fichier2.xml")); files.put("Fichier3", getAssets().open("Fichier3.xml")); } catch (IOException e) { // ... } CardMaker.createCardList(files);
La classe Card est un conteneur pour mes données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public static void createCardList(Map<String,InputStream> files){ // TODO : Transfer to Model for DAO SAXParserFactory fabrique = SAXParserFactory.newInstance(); SAXParser parseur; try { parseur = fabrique.newSAXParser(); CardHandler gestionnaire = new CardHandler(); parseur.parse(files.get("Fichier1"), gestionnaire); Card.oneCards = gestionnaire.getCards(); gestionnaire = new CardHandler(); parseur.parse(files.get("Fichier2"), gestionnaire); Card.twoCards = gestionnaire.getCards(); gestionnaire = new CardHandler(); parseur.parse(files.get("Fichier3"), gestionnaire); Card.threeCards = gestionnaire.getCards(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
Le parseur est un parseur tout banal qui lit balise ouverture/fermeture, etc...
Lorsque je met un point d'arrêt au niveau de la fonction characters du parseur, le ch ne contient qu'un saut de ligne, et rien d'autre là où sur l'application "normale", je retrouve tout mon fichier xml.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void characters(char[] ch, int start, int length) throws SAXException { String read = new String(ch,start,length); if(buffer != null){ buffer.append(read); } }
Il n'y a pas de problème au niveau de la taille des fichiers (ils font 5ko max chacun), et apparemment la lecture des assets se fait puisque la fonction suivante :
Appelée avec le getAssets().open("file.xml"); me renvoie bien la chaine avec tout mon joli fichier...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public static String readInputStreamAsString(InputStream in) throws IOException { BufferedInputStream bis = new BufferedInputStream(in); ByteArrayOutputStream buf = new ByteArrayOutputStream(); int result = bis.read(); while(result != -1) { byte b = (byte)result; buf.write(b); result = bis.read(); } return buf.toString(); }
Donc là je coince, je soupçonne de mal m'y prendre avec les inputstream et les assets, mais où est l'erreur?? Je n'ai aucune exception nulle part, si ce n'est dans la suite du programme lorsqu'il tombe sur une recherche sur des informations désespérément vides.
Merci d'avoir pris le temps de me lire, et merci à ceux qui pourraient éclairer ma lanterne.
Partager