IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Ecrire dans un fichier txt ressources


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut Ecrire dans un fichier txt ressources
    Bonjour,

    Je demande votre aide car je suis en train de réaliser une appli sur android : un genre d'action ou vérité et j'aurai besoin que les utilisateurs puissent ajouter leurs propres défis à la liste de base.

    J'ai pour l'instant un fichier dans res/raw sur lequel je peux piocher et afficher les défis, mais je n'ai pas la moindre idée de comment ajouter des lignes a ce fichier texte. Comment faire pour permettre a l'utilisateur de modifier ce fichier et d'y écrire ses défis ?

    Merci bcp

  2. #2
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6

  3. #3
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Tout ce qui se trouve dans res/ ne peut pas être modifié par la suite.
    Lorsqu'il s'agit de gérer des données dynamiques (en ajouter, en détruire, ...), plusieurs techniques s'offrent à toi, récapitulées dans la section "Persistance" du cours.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    J'ai essayé de faire comme indiqué ici http://huuah.com/android-writing-and-reading-files/ dans ton lien bm, mais j'ai l'impression que ca ne garde pas en mémoire ce que j'écrit dans le fichier, ou en tout cas je n'arrive pas à le faire :/
    J'ai aussi essayer ces méthodes mais l'application crashe car je ne sais pas quoi mettre en parametre pour File dir. http://webauditeur.cnam-paysdelaloir...e-FICHIERS.pdf

    Hephaistos, j'ai lu le cours et je pense que ce qu'il me faut, ce sont les fichiers plats. Mais, encore une fois, a chaque fois que j'essaie de créer une méthode qui sappuie sur ce tuto, ca ne marche pas.

  5. #5
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    http://huuah.com/android-writing-and-reading-files/

    Ce genre de tuto ne donne pas le détail .
    Voilà ce que j'ai et qui va bien :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;
     
    public class MainActivity extends Activity {
    	private EditText et;
    	private String data;
    	private String file = "mydata";
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		et = (EditText)(findViewById(R.id.editText1));
    	}
     
    	public void save(View view){
    		data = et.getText().toString();
    		try {
    			@SuppressWarnings("deprecation")
    			FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
    			fOut.write(data.getBytes());
    			fOut.close();
    			Toast.makeText(getBaseContext(),"Stockage fichier",
    			Toast.LENGTH_SHORT).show();
    		} catch (Exception e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    		}
    	}
    	public void read(View view){
    		try{
    			FileInputStream fin = openFileInput(file);
    			int c;
    			String temp="";
    			while( (c = fin.read()) != -1){
    				temp = temp + Character.toString((char)c);
    			}
    			et.setText(temp);
    			Toast.makeText(getBaseContext(),"Lecture fichier",
    			Toast.LENGTH_SHORT).show();
     
    		}catch(Exception e){
     
    		}
    	}
    }

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Merci, je l'ai un peu adapté à mon problème et cela ne marche pas trop mal. Le seul probleme c'est que lorsque je fais read(); il n'affiche que la derniere phrase que j'ai écrite dans le fichier.
    Il me semble qu'a chaque fois que j'écrit save(); cela efface le contenu du fichier pour mettre le nouveau texte.

    Bon, je peux tres bien sauvegarder le contenu du fichier dans un String, et simplement rajouter la phrase que je veux écrire au fichier à la fin de ce String et sauvegarder l'ensemble, mais il y a sans doute une maniere plus belle, non ? ( et plus efficace dans la mesure ou je voudrais environ 200 lignes dans ce fichier)
    Voila le code correspondant :

    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
    27
    28
    29
    30
    31
    32
     
     
        public void save(String texte) {
     
                  String texte_a_garder = read()+"\n"+texte;
            try {
                FileOutputStream fOut = openFileOutput("basededefi", MODE_PRIVATE );
                fOut.(texte_a_garder.getBytes());
                fOut.close();
                Toast.makeText(getBaseContext(), "Stockage fichier",
                        Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public void read(){
            try{
                FileInputStream fin = openFileInput("basededefi");
                int c;
                String temp="";
                while( (c = fin.read()) != -1){
                    temp = temp + Character.toString((char)c);
                }
                Log.d("message", temp);
                Toast.makeText(getBaseContext(),"Lecture fichier",
                        Toast.LENGTH_SHORT).show();
     
            }catch(Exception e){
     
            }
        }
    Et derniere chose, comment puis-je acceder au fichier manuellement afin d'y écrire a la main ce que je voudrais qu'il y ait au debut ?

    Merci de ton aide

  7. #7
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Et derniere chose, comment puis-je acceder au fichier manuellement afin d'y écrire a la main ce que je voudrais qu'il y ait au debut ?
    Non , le stockage est dans la mémoire interne du tel ( je ne sais où ? ) .
    Faut reprendre le tuto avec un yeux neuf ..
    Accumuler de l'expérience fait progresser

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       FileInputStream fin = openFileInput(file);
       int c;
       String temp="";
       while( (c = fin.read()) != -1){
        temp = temp + Character.toString((char)c);
       }
       et.setText(temp);
    On a vu plus simple pour la lecture

    D'autant que vu la fonction d'écriture c'est faux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
       fOut.write(data.getBytes());
       fOut.close();
    A l'écriture on écrit des "bytes" (octets) représentant les caractères. Soit de l'UTF-16 (puisque java utilise ceci en interne pour les string).
    A la lecture on lit aussi des "bytes" (octets), mais qui sont transformés 1 à 1 en caractères....
    (sans compter que temp = temp + ... c'est une horreur en java).


    Voici le (enfin..."un" ) code en écriture / lecture d'un fichier:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    private static final String CHARSET = "UTF-8";
     
    private void writeFile(String data, String filename) throws IOException
    {
        FileOutputStream fout = null;
        OutputStreamWriter writer = null;
     
        try {   // <= et oui, en cas d'exception il faut fermer les stream (voir plus bas la clause "finally")
            fout = openFileOutput(filename,MODE_WORLD_READABLE); // <= le fichier sera dans les "data" privées de l'application
            writer = new OutputStreamWriter(fout , CHARSET);
            writer.write(data); 
            writer.flush(); // <= pas forcément utile... mais bon
        } finally {
            if (writer != null) try { writer.close(); } catch (IOException ex) { Log.e("writeFile","Failed to gracefully close writer !",ex); }
            if (fout != null) try { fout.close(); } catch (IOException ex) { Log.e("writeFile","Failed to gracefully close output stream !",ex); }
        }
    }
     
    private static final int BUFFER_SIZE = 2048; // <= par exemple
     
    private String readFile(String filename) throws IOException
    {
         StringBuilder builder = new StringBuilder();
         FileInputStream fin = null;
         InputStreamReader reader = null;
     
         try {
            fin = openFileInput(filename);
            reader = new InputStreamReader(fin, CHARSET);
     
            char buffer = new char[BUFFER_SIZE]; 
            int len;
            while ((len = reader.read(buffer) != -1) 
                builder.append(buffer);
        } finally {
            if (reader != null) try { reader.close(); } catch (IOException ex) { Log.e("writeFile","Failed to gracefully close reader!",ex); }
            if (fin!= null) try { fin.close(); } catch (IOException ex) { Log.e("writeFile","Failed to gracefully close input stream !",ex); }
        }
        return builder.toString();
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Nicroman, est ce qu'avec ta fonction, lorsqu'on écrit dans le fichier, il conserve ce qu'on avait déjà écrit dedans ou bien il rajoute par dessus ?

    Vu qu'on est dans les "data" privées de l'application, le seul moyen d'initialiser le texte contenue dans le fichier c'est de le faire au lancement de l'application avec un truc du genre ?

    if(!filename.exist()) -> on "write" ce qu'il faut dedans.

    Merci

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    non c'est le fonctionnement "normal" des fichiers, on ouvre un fichier en écriture, si il existait, il est overwrité...
    En même temps, à part pour du "log", c'est hyper rare de faire du "append".
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  11. #11
    Membre actif Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Points : 245
    Points
    245
    Par défaut
    Mais sinon, tu as pensé a ajouter une petite base de donnée en sqlite3?
    Tu y met 1 table "défis" avec quelque carac et tu fais rapidement les méthodes de création/lecture/update/delete.
    C'est persistant c'est pas long a mettre en place et c'est plus modulable qu'un fichier que tu dois gérer toi-même...

  12. #12
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Sqlite3 ou mysql sur un serveur distant , sera aussi profitable pour consulter des data .

    Les webview de android permettent d'afficher toute les pages www internes ou externes .

    Un terminal mobile peut garder les data des capteurs , mais pas sur que c'est sous forme txt ..

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Je viens de regarder pour les bases de données, mais je ne voie pas vraiment la différence avec ce que j'ai déja. Il faut l'initialiser à la premiere ouverture de l'application, et ensuite il faut ajouter de nouveaux défis à la base via une commande. Tout pareil qu'avec mon fichier texte, non ?

  14. #14
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Avec les grands principes généraux , tout est comparable .
    C'est le projet qui va pousser la réflexion sur différents scripts .
    Et les scripts s'adaptent en fonction du CdCh .
    Sans projet , tourner en rond sur du codage , ne fait rien avancer ..

  15. #15
    Membre actif Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Points : 245
    Points
    245
    Par défaut
    Le grand intérêt d'une db, c'est que tu n'as pas besoin de parser et de formater ton texte.
    Tu ajoute une string dans ta table, peu importe qu'elle contienne des caractère spéciaux ou pas, qu'elle prenne 4 lignes ou pas, tu t'en fou, c'est sqlite qui gère ca.
    Ton taf se résume juste a faire des fonctions pour inserer/recuperer/mettre a jour/detruire les lignes.

    Tu n'a pas besoin de faire attention a ajouter un saut de ligne a la fin de ta string et tu n'a pas besoin de faire de read et de faire une gestion d'erreur poussé (ce que tu devra faire si tu laisse les utilisateurs ajouter ce qu'ils veulent).
    Avec une db, tu prend la string de l'utilisateur, tu peux éventuellement faire un peu de traitement dessus (si tu souhaite limiter le nombre de caractère ou interdire certains caractères spéciaux par exemple) et tu la met ds ta table. Idem pour la récupération, tu récupérè dans ta tab et tu peux direct l'afficher.

    Après oui, tu peux bien sur rester avec un fichier et l'utiliser sans probleme, je disais juste qu'une db me parait plus adapté pour gérer une collection.

    GLHF

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Et peut t'on acceder à une base de données manuellement ? ( ou c'est comme le fichier dans les data internes )

  17. #17
    Membre actif Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Points : 245
    Points
    245
    Par défaut
    Pour citer un tuto sur les db Android en sqlite :

    SQLite a été inclus dans le cœur même d'Android, c'est pourquoi chaque application peut avoir sa propre base. De manière générale, les bases de données sont stockées dans les répertoires de la forme /data/data/<package>/databases. Il est possible d'avoir plusieurs bases de données par application, cependant chaque fichier créé l'est selon le mode MODE_PRIVATE, par conséquent les bases ne sont accessibles qu'au sein de l'application elle-même. Notez que ce n'est pas pour autant qu'une base de données ne peut pas être partagée avec d'autres applications.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Autant pour moi..! Merci, je vais essayer d'en faire une en suivant un tuto alors. Je vous tiens au courant si j'ai des problemes. Merci

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Attention les yeux, il va y avoir du code ! Et je ne suis pas sur qu'il n'y ait pas de faute...

    Voila la classe pour la base de 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
    27
    28
    29
    30
    public class MaBase extends SQLiteOpenHelper {
        public static final String DEFI_KEY = "id";
        public static final String DEFI_INTITULE = "intitule";
        public static final String DEFI_ORIGINE_UTILISATEUR = "personnel";
     
     
        public static final String DEFI_TABLE_NAME = "TABLE_DEFI";
        public static final String DEFI_TABLE_CREATE =
                "CREATE TABLE " + DEFI_TABLE_NAME + " (" +
                        DEFI_KEY + " INTEGER PRIMARY KEY AUTOINCREMENT, " + DEFI_ORIGINE_UTILISATEUR + " INTEGER DEFAUT 0, " +
                        DEFI_INTITULE + " TEXT);" ;
     
        public static final String DEFI_TABLE_DROP = "DROP TABLE IF EXISTS " + DEFI_TABLE_NAME + ";";
     
     
        public MaBase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }
     
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DEFI_TABLE_CREATE);
        }
     
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL(DEFI_TABLE_DROP);
            onCreate(db);
        }
    }
    Celle pour la manipuler :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    public class MaBaseDD {
     
        private static final int VERSION_BDD = 1;
        private static final String NOM_BDD = "eleves.db";
     
        private static final String TABLE_DEFI = "TABLE_DEFI";
        private static final String COL_ID = "id";
        private static final String COL_INTITULE = "intitule";
     
     
        //Cette colonne sert a savoir si c'est moi qui ai rajouté les défis ( dans ce cas elle vaut 0 ) ou l'utilisateur ( elle vaut 1)
        public static final String COL_DEFI_ORIGINE_UTILISATEUR = "personnel";
        private static final int NUM_COL_INTITULE = 2;
        private SQLiteDatabase bdd;
     
        private MaBase maBaseSQLite;
     
        public MaBaseDD (Context context){
            //On créer la BDD et sa table
            maBaseSQLite = new MaBase(context, NOM_BDD, null, VERSION_BDD);
        }
     
        public void open(){
            //on ouvre la BDD en écriture
            bdd = maBaseSQLite.getWritableDatabase();
        }
     
        public void close(){
            //on ferme l'accès à la BDD
            bdd.close();
        }
     
        public SQLiteDatabase getBDD(){
            return bdd;
        }
     
        public long insertDefi(String defi){
            //Création d'un ContentValues (fonctionne comme une HashMap)
            ContentValues values = new ContentValues();
            //on lui ajoute une valeur associé à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
            values.put(COL_INTITULE, defi);
            //on insère l'objet dans la BDD via le ContentValues
            return bdd.insert(TABLE_DEFI, null, values);
        }
     
        public long insertDefiPersonnel(String defi){
            //Création d'un ContentValues (fonctionne comme une HashMap)
            ContentValues values = new ContentValues();
            //on lui ajoute une valeur associé à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur) et on met 1 en origine personnel signifiant qu'il a été ajouté par l'utilisateur
            values.put(COL_INTITULE, defi);
            values.put(COL_DEFI_ORIGINE_UTILISATEUR, 1);
            //on insère l'objet dans la BDD via le ContentValues
            return bdd.insert(TABLE_DEFI, null, values);
        }
     
        public int removeDefiPosition (int id){
            //Suppression d'un defi de la BDD grâce à l'ID
            return bdd.delete(TABLE_DEFI, COL_ID + " = " +id, null);
        }
     
        public String getDefiPosition(int position){
            //Récupère dans un Cursor le defi grâce à sa position
            Cursor c = bdd.rawQuery("select " + COL_ID + " from " + TABLE_DEFI + " where intitule = ?", new String[]{""+position});
           return cursorToString(c);
        }
     
        //Recuperer tout les défis crées par l'utilisateur ( donc avec 1 en colonne personnel )
        public String getAllDefiPersonnel (){
            //Récupère dans un Cursor le defi grâce à sa position
            Cursor c = bdd.rawQuery("select " + COL_DEFI_ORIGINE_UTILISATEUR + " from " + TABLE_DEFI + " where personnel = ?", new String[]{"1"});
            return cursorToString(c);
        }
     
        //Cette méthode permet de convertir un cursor en le défi correspondant
        private String cursorToString(Cursor c){
            //si aucun élément n'a été retourné dans la requête, on renvoie null
            if (c.getCount() == 0)
                return null;
     
            //Sinon on se place sur le premier élément
            c.moveToFirst();
            //On récupere le defi
            String defi = c.getString(NUM_COL_INTITULE);
            //On ferme le cursor
            c.close();
     
            //On retourne le defi
            return defi;
        }
    }
    Et ensuite je n'ai plus qu'a l'initialiser si elle est vide ( comment le savoir ? ). Merci de votre aide en tout cas, j'approche de la fin !

    Edit : il y a forcement une erreur quelque part.. car j'ai un SQLiteException: near "0": syntax error (code 1): , while compiling: CREATE TABLE TABLE_DEFI (id INTEGER PRIMARY KEY AUTOINCREMENT, personnel INTEGER DEFAUT 0, intitule TEXT) lorsque je fais basededonné.open(); aprés l'avoir initialisé

  20. #20
    Membre actif Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Points : 245
    Points
    245
    Par défaut
    Re,

    Alors je ne me rappel plus du fonctionnement de sqlite (j'utilise greenDao) mais il me semble que tu peux injecter des valeurs dans ta base lors de la création de celle-ci.
    Je ne me rappel plus de la fonction mais je suis sur que ca existe (ou presque en tout cas ^^).
    Pour ton nullPointerException, difficile a dire avec ce qu'on a comme code la.
    Comme je l'ai dit, je n'utilise plus directement les requete sqlite3 donc niveau syntaxe, je peux pas trop t'aider...
    Donne nous ton messages d'erreur et vérifie tes paramètres, tu un null quelque part

    EDIT: Ton erreur ne viendrait pas du "DEFAUT" qui serai en fait "DEFAULT" ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment ecrire dans un fichier txt avec WriteFile?
    Par Art19 dans le forum Langage
    Réponses: 13
    Dernier message: 04/07/2007, 15h50
  2. Ecrire dans un fichier txt en 4gl
    Par patriceguic dans le forum Informix
    Réponses: 2
    Dernier message: 07/05/2007, 20h44
  3. Ecrire dans un fichier .txt
    Par chabRRR dans le forum Langage
    Réponses: 3
    Dernier message: 13/03/2007, 19h30
  4. Ecrire dans un fichier .txt
    Par yinyann86 dans le forum Pascal
    Réponses: 17
    Dernier message: 24/11/2006, 13h36
  5. Ecrire dans un fichier txt sans en effacer le contenu
    Par cari dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 14/12/2005, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo