Utilisateur anonyme
-
20 juil. 2009 à 14:03
Utilisateur anonyme -
20 juil. 2009 à 18:36
Bonjour,
je cherche à créer un programme en java mobile qui permet de remplir un formulaire. Une fois ce formulaire remplit on doit pouvoir récupérer le nom du champ et la valeur saisie pour les enregistrer dans un fichier texte.
La création du formulaire ne pause pas de problème.
Mon problème est qu'à ma connaissance la fonction write() ne prend en argument qu'un tableau de bits. Mais je ne parvient pas à convertir un tableau chaîne de caractère en tableau de bit. cf. Mon code ci-dessous (partie en gras)
import javax.microedition.midlet.*; // contient les éléments de base
import javax.microedition.io.*;
import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.io.file.*;
import javax.microedition.lcdui.*; // contient les éléments permettant de gérer l'interface
import java.io.*; // contient les éléments permettant de gérer l'interface
import java.io.Writer;
import java.lang.NumberFormatException;
public class Configuration extends MIDlet implements CommandListener
{
/* Déclaration des composants de l'interface homme-machine */
public Display display;
public TextField captureFrequency = null,
tolerance = null,
storageDestinationFolder = null,
gpsAddress = null,
taximeterAddress = null,
numcab = null,
numCaptures = null,
limitStorageTime = null;
public Command exitCommand, confirm;
public Form form1;
/* Déclaration des variable qui seront contenu dans le tableau de bytes */
public String parameter1;public String value1;
public String parameter2;public String value2;
public String parameter3;public String value3;
public String parameter4;public String value4;
public String parameter5;public String value5;
public String parameter6;public String value6;
public String parameter7;public String value7;
public String parameter8;public String value8;
public String url;
public byte[] contenu;
public Configuration()
{
display = Display.getDisplay(this); // fait un lien avec l'affichage
// creation d'un objet formulaire sur lequel on peut placer des composants
form1 = new Form("--- Configuration Form ---");
// Création des champs du formulaire
captureFrequency new TextField("Capture Frequency", null, 4, TextField.DECIMAL);
numCaptures new TextField("Number Of Captures", null, 2, TextField.DECIMAL);
tolerance new TextField("Tolerance", null, 2, TextField.DECIMAL);
storageDestinationFolder new TextField("Destination Storage Folder", null, 100, TextField.ANY);
limitStorageTime new TextField("Limit Storage Time", null, 100, TextField.DECIMAL);
gpsAddress new TextField("GPS Address", null, 100, TextField.ANY);
taximeterAddress new TextField("Taximeter Address", null, 100, TextField.ANY);
numcab new TextField("Cab Number", null, 100, TextField.DECIMAL);
// creation des boutons pour sortir du programme et pour confirm la Configuration
//exitCommand = new Command("Exit", Command.SCREEN,2);
//confirm = new Command("confirm", Command.OK, 1);
exitCommand = new Command("Exit",Command.EXIT, 0);
confirm = new Command("Confirm", Command.OK , 1);
// ajout des composants au formulaire
form1.addCommand(exitCommand);
form1.addCommand(confirm);
FileConnection fc = (FileConnection) Connector.open(url, Connector.READ_WRITE);
if (!fc.exists()) {
fc.create();
}
OutputStream os = fc.openOutputStream();
os.write(textToSave);
os.close();
}
catch(Exception e )
{
System.out.println("\n\n\t FILE CREATION FAILED \n");
}
}
// évènement exécuté au démarrage de l'application
public void startApp()
{
System.out.println("\n\n\t APPLICATION STARTED ");
// affichage du formulaire
display.setCurrent(form1);
}
// évènement exécuté lors de la mise en pause de l'application
public void pauseApp()
{
}
// évènement exécuté lorsque l'application se termine
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command c, Displayable s)
{
// lors du clic sur le bouton Exit
if (c == exitCommand)
{
// appel manuel à la fonction de fermeture
destroyApp(false);
// on demande au manager de fermer l'application
notifyDestroyed();
}
if (c == confirm)
{
System.out.println("\n\n\t ACCEPTED COMMAND \n");
saveFile(url,contenu);
Kotomine
Messages postés112Date d'inscriptionlundi 29 juin 2009StatutMembreDernière intervention 5 novembre 2009 20 juil. 2009 à 14:14
J'ai pas tout lu, mais apparemment, tu as une variable locale qui a le même nom qu'un champ de ta classe.
Mais au passage
/* Déclaration des variable qui seront contenu dans le tableau de bytes */
public String parameter1;public String value1;
public String parameter2;public String value2;
public String parameter3;public String value3;
public String parameter4;public String value4;
public String parameter5;public String value5;
public String parameter6;public String value6;
public String parameter7;public String value7;
public String parameter8;public String value8;
public String url;
public byte[] contenu;
Beurkkkkkk.
Ca n'a rien à faire dans le contenu de ta classe, et encore moins en "public" (toujours ce dire que public = intéressant pour quelqu'un qui cannait rien à ton application, et qui voudrait la manipuler depuis l'extérieur)
Je te conseilles de faire une méthode
public byte[] toBytes(){...} dans ta classe Configuration, dans laquelle tu convertira tout en bytes.
; I'm just keeping the hopeless cross to increase the meaninglessness
J'ai corrigé mon code qui du fait de mon faible niveau en java était effectivement très moche.
Il me reste une exception java.NumberformatExpression
L'idée si je te suis c'est de faire une méthode toByte() dans laquelle je met par exemple Byte.parseByte(tolerance.getLabel())
puis en dehors je fait String[] contenu; et contenu.toByte()
Kotomine
Messages postés112Date d'inscriptionlundi 29 juin 2009StatutMembreDernière intervention 5 novembre 2009 20 juil. 2009 à 16:36
Généralement, le java.NumberformatExpression est pondu par un Integer.parseInt (ou float, double, etc, qui transforme une chaine de caractère en nombres), lorsque le nombre n'est pas en notation standard (grossierement : 124456789.33456890 ou le . délimite les décimales)
Essaie de repérer là où tu sembles que cette opération se produit.
; I'm just keeping the hopeless cross to increase the meaninglessness
java.lang.NumberFormatException: Capture Frequency =
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Byte.parseByte(Byte.java:151)
at java.lang.Byte.parseByte(Byte.java:108)
at Configuration.commandAction(Configuration.java:153)
at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282)
at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10)
at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68)
at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(AutomatedEventHandler.java:670)
at
com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+186)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)
Execution completed.
--------------------------
Ca correspond au moment où je commence à convertir le textfield en byte..