EditText Android, sauvegarder le champ ?
Fermé
Shidy06
-
23 août 2010 à 16:56
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 - 24 août 2010 à 16:47
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 - 24 août 2010 à 16:47
A voir également:
- EditText Android, sauvegarder le champ ?
- Mode sécurisé android - Guide
- Sauvegarder sms android - Guide
- Android recovery - Guide
- Télécharger vidéo youtube android - Guide
- Sauvegarder téléphone android - Guide
19 réponses
Aucun soucis !
Bon actuellement j'en suis à là grâce à ta réponse rapide :)
Pour les "text" définis sur les deux premières lignes, je suppose que ça n'a rien à faire la compte tenu de mon projet.
Pour info histoire que vous ayez plus de cartes en mains, les deux EditText sont dans mon main.xml, comme ceci :
Après y'a FILENAME qui est affiché comme erreur (l3) , puis Context. pour lequel je me demande si ça doit rester comme ça ou si je dois l'adapter au projet ?
Merci !
Bon actuellement j'en suis à là grâce à ta réponse rapide :)
String filename = "text"; String string = "text"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close();
Pour les "text" définis sur les deux premières lignes, je suppose que ça n'a rien à faire la compte tenu de mon projet.
Pour info histoire que vous ayez plus de cartes en mains, les deux EditText sont dans mon main.xml, comme ceci :
<EditText android:layout_width="fill_parent" android:layout_height="50dip" android:scrollbars="vertical" android:id="@+id/editText1"/> <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="vertical" android:id="@+id/editText2" />
Après y'a FILENAME qui est affiché comme erreur (l3) , puis Context. pour lequel je me demande si ça doit rester comme ça ou si je dois l'adapter au projet ?
Merci !
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
23 août 2010 à 19:38
23 août 2010 à 19:38
Salut,
Si je ne me trompe, ça enregistre automatiqument non seulement le texte, mais aussi la position du curseur... Rien à faire, donc.
++
Si je ne me trompe, ça enregistre automatiqument non seulement le texte, mais aussi la position du curseur... Rien à faire, donc.
++
Salut,
Tu dois mettre un listener sur ton bouton (OnClickActionListener ou quelque chose comme ca). A l'intérieur, il faut tout simplement faire une sauvegarde de ton texte dans la carte mémoire (cherche sur google "save file android").
Si c'est trop abstrait n'hésite pas a demander.
Tu dois mettre un listener sur ton bouton (OnClickActionListener ou quelque chose comme ca). A l'intérieur, il faut tout simplement faire une sauvegarde de ton texte dans la carte mémoire (cherche sur google "save file android").
Si c'est trop abstrait n'hésite pas a demander.
Ah :)
Sachant que typiquement j'ai deux champs EditText à sauvegarder (un définissant le titre du document, l'autre son contenu).
Donc si je comprends bien, pour sauvegarder le contenu, je m'y prends un peu comme quand j'avais souhaité affiché un pop-up (toast) lors du click sur ce fameux bouton de sauvegarde ?
Le toast fonctionne comme ceci :
Bon a la limite pour le listener je devrais m'en sortir. Par contre j'ai été voir sur Google, pour ce qui est de la sauvegarde de données sur la mémoire du téléphone, j'ai eu cet exemple la :
Mais j'ai pas mal d'erreurs en l'entrant, j'pense bien qu'il y ai des choses à adapter mais quoi ? :D
Merci pour l'aide en tout cas !
Sachant que typiquement j'ai deux champs EditText à sauvegarder (un définissant le titre du document, l'autre son contenu).
Donc si je comprends bien, pour sauvegarder le contenu, je m'y prends un peu comme quand j'avais souhaité affiché un pop-up (toast) lors du click sur ce fameux bouton de sauvegarde ?
Le toast fonctionne comme ceci :
OnClickListener my_listener1 = new OnClickListener(){
public void onClick(View v){
Toast saved_message = Toast.makeText(Notepad_fr.this, "NotePad FR enregistré.", 1);
saved_message.show();
}
};
final Button save_button = (Button) findViewById(R.id.button1);
save_button.setOnClickListener(my_listener1);
Bon a la limite pour le listener je devrais m'en sortir. Par contre j'ai été voir sur Google, pour ce qui est de la sauvegarde de données sur la mémoire du téléphone, j'ai eu cet exemple la :
String filename = "hello_file"; String string = "hello world!"; string = "Bonjour tout le monde!"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); FileOutputStream fos = openFileOutput (FILENAME, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.write (string.getBytes ()); fos.close(); fos.close ();
Mais j'ai pas mal d'erreurs en l'entrant, j'pense bien qu'il y ai des choses à adapter mais quoi ? :D
Merci pour l'aide en tout cas !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
24 août 2010 à 11:30
24 août 2010 à 11:30
Re,
Pardon pour mon 1er post, j'avais mal lu ce que tu voulais faire. J'ai cru que tu voulais faire une sauvegarde de ton texte entre 2 sessions, ce qui n'est pas nécessaire (Android s'en occupe).
++
Pardon pour mon 1er post, j'avais mal lu ce que tu voulais faire. J'ai cru que tu voulais faire une sauvegarde de ton texte entre 2 sessions, ce qui n'est pas nécessaire (Android s'en occupe).
String string = "hello world!"; string = "Bonjour tout le monde!";==> corrige cette double déclaration déjà. Idem pour le fos (supprime une ligne). Et idem pour les appels write() et close().
++
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
24 août 2010 à 11:48
24 août 2010 à 11:48
Après y'a FILENAME qui est affiché comme erreur (l3) , puis Context. pour lequel je me demande si ça doit rester comme ça ou si je dois l'adapter au projet ?
==> il faut remplacer FILENAME par un vrai nom de fichier (filename, par exemple, que tu as déclaré plus haut). Et pour Context, il faut l'importer:
++
==> il faut remplacer FILENAME par un vrai nom de fichier (filename, par exemple, que tu as déclaré plus haut). Et pour Context, il faut l'importer:
import android.content.Context;
++
Exact, désolé pour le Context... je l'avais importé en plus :/
Donc on en arrive à la du coup :
La, pas d'erreurs.
Maintenant, je suppose qu'il faut définir le filename comme étant le contenu de l'EditText ?
Donc on en arrive à la du coup :
String filename = "title";
String string = "text";
FileOutputStream fos = null;
try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
fos.write(string.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
La, pas d'erreurs.
Maintenant, je suppose qu'il faut définir le filename comme étant le contenu de l'EditText ?
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
24 août 2010 à 12:13
24 août 2010 à 12:13
Oui, tout à fait. Si un des EditText contient le nom du fichier et l'autre le texte à sauvegarder, il te faut qqchose qui ressemble à ceci:
EditText fileET = (EditText) findViewById(R.id.editText1); // editText1 contient le nom du fichier String filename = fileET.getText().toString(); EditText contentET = (EditText) findViewById(R.id.editText2); // editText2 contient le contenu à sauvegarder String string = contentET.getText().toString();
Ah en effet ! Simple finalement. Merci beaucoup !
Par contre Eclipse veux que je renomme filename et string. Un oubli ?
Par contre Eclipse veux que je renomme filename et string. Un oubli ?
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
24 août 2010 à 12:25
24 août 2010 à 12:25
Hum, je ne puis vérifier car pas d'Eclipse devant mes yeux... Mais pourquoi renommer ? Quel est le contenu exact du warning ?
Nan en fait erreur de ma part, j'avais laissé des codes en trop.
Bon je lance l'appli, elle crash. Je te résume la page java, parce que je me demande si je dois pas créer une nouvelle classe du coup :
Bon je lance l'appli, elle crash. Je te résume la page java, parce que je me demande si je dois pas créer une nouvelle classe du coup :
package com.shidy06.notepad_fr;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Notepad_fr extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Toast affiché au clic sur le bouton 1
OnClickListener my_listener1 = new OnClickListener(){
public void onClick(View v){
Toast saved_message = Toast.makeText(Notepad_fr.this, "NotePad FR enregistré.", 1);
saved_message.show();
}
};
//Référence du Toast précédent
final Button save_button = (Button) findViewById(R.id.button1);
save_button.setOnClickListener(my_listener1);
//Bouton pour quitter l'application
((Button) findViewById(R.id.button3)).setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
Notepad_fr.this.finish() ;
}
});
//Bouton pour aller dans les Notepad sauvegardés
Button button4 = (Button) findViewById(R.id.button2);
button4.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent i = new Intent(Notepad_fr.this, Notepad_fr_saved.class);
startActivity(i);
Notepad_fr.this.finish() ;
}
});
EditText fileET = (EditText) findViewById(R.id.editText1);
String filename = fileET.getText().toString();
EditText contentET = (EditText) findViewById(R.id.editText2);
String string = contentET.getText().toString();
FileOutputStream fos = null;
try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
fos = openFileOutput(string, Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
fos.write(string.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
24 août 2010 à 12:33
24 août 2010 à 12:33
As-tu rajouté les permissions dans le fichier manifest ?
A plus, je vais mangeailler, bon app !
A plus, je vais mangeailler, bon app !
Hm... non.
Donc c'est part pour le manifest !
Par contre, comment procéder parce que je t'avoue que c'est flou pour moi !
Bon ap', j'vais faire de même :)
Donc c'est part pour le manifest !
Par contre, comment procéder parce que je t'avoue que c'est flou pour moi !
Bon ap', j'vais faire de même :)
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
24 août 2010 à 13:41
24 août 2010 à 13:41
Re,
Je ne suis pas sûr en fait s'il te faut une permission pour sauvegarder sur la mémoire interne (comme tu le fais). Pour les permissions, c'est par ici: https://developer.android.com/reference/android/Manifest.permission.html et il faut rajouter une permission de type WRITE_EXTERNAL_STORAGE si tu veux utiliser la carte SD.
Ton code plante pour des raisons différentes, par contre... regarde ce que ça donne après une tite réorganisation (déplacement du code vers le listener du bouton button1):
Je ne suis pas sûr en fait s'il te faut une permission pour sauvegarder sur la mémoire interne (comme tu le fais). Pour les permissions, c'est par ici: https://developer.android.com/reference/android/Manifest.permission.html et il faut rajouter une permission de type WRITE_EXTERNAL_STORAGE si tu veux utiliser la carte SD.
Ton code plante pour des raisons différentes, par contre... regarde ce que ça donne après une tite réorganisation (déplacement du code vers le listener du bouton button1):
package com.shidy06.notepad_fr;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Notepad_fr extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button save_button = (Button) findViewById(R.id.button1);
save_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
FileOutputStream fos = null;
EditText contentET = (EditText) findViewById(R.id.editText2);
String string = contentET.getText().toString();
EditText fileET = (EditText) findViewById(R.id.editText1);
String filename = fileET.getText().toString();
try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(string.getBytes());
Toast saved_message = Toast.makeText(Notepad_fr.this,
"NotePad FR enregistré.", 1);
saved_message.show();
} catch (Exception e) {
Log.e("Sudoku", e.getMessage());
} finally {
try {
fos.close();
} catch (IOException e) {
}
}
}
});
}
}
Re !
Alors écoute le code est parfait ! Erreur donc à cause des permissions mais j'ai ajouté WRITE_EXTERNAL_STORAGE et tout ce passe comme sur des roulettes !
Prochaine étape, utiliser un second bouton pour pouvoir accéder aux fichiers sauvegardés sous forme de list (ListVIew !)
Sachant que j'ai une deuxième activité et un XML layout déjà pret pour ça !
Merci beaucoup pour ton aide !
Alors écoute le code est parfait ! Erreur donc à cause des permissions mais j'ai ajouté WRITE_EXTERNAL_STORAGE et tout ce passe comme sur des roulettes !
Prochaine étape, utiliser un second bouton pour pouvoir accéder aux fichiers sauvegardés sous forme de list (ListVIew !)
Sachant que j'ai une deuxième activité et un XML layout déjà pret pour ça !
Merci beaucoup pour ton aide !
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
24 août 2010 à 15:24
24 août 2010 à 15:24
Fais un premier jet du code et poste-le... Vais essayer d'y jeter un coup d'oeil, mais je ne promets rien.
Dans un autre ordre d'idées: tu as ici 11 tits tutos pas mal http://www.xtensivearts.com/topics/tutorials/ et s'il s'agit de bouquins, je te recommande chaleureusement de commencer par Hello Android d'Ed Burnette: https://www.amazon.com/Hello-Android-Introducing-Development-Programmers/dp/1934356565/ref=sr_1_2?s=books&ie=UTF8&qid=1282656185&sr=1-2
++
Dans un autre ordre d'idées: tu as ici 11 tits tutos pas mal http://www.xtensivearts.com/topics/tutorials/ et s'il s'agit de bouquins, je te recommande chaleureusement de commencer par Hello Android d'Ed Burnette: https://www.amazon.com/Hello-Android-Introducing-Development-Programmers/dp/1934356565/ref=sr_1_2?s=books&ie=UTF8&qid=1282656185&sr=1-2
++
Le site de tutos que tu m'as donné est plutôt sympa, voila sûrement ce dont j'ai besoin. Parce que des tutos android, tu trouve 40 helloworld, mais après dès que tu veux faire un peu plus t'es laché dans la jungle.
Je regarde ça, je compile et je reposte !
Merci !
Je regarde ça, je compile et je reposte !
Merci !
Mon deuxieme code est la :
J'ai suivi des tutos mais à la finale ça ne ressemble plus a rien...
"France" et "USA" sont des valeurs à titre d'exemple, elles n'ont rien a faire ici.
Ca crashouille pas mal du coup, le switch sur la page n'est plus possible !
package com.shidy06.notepad_fr;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
public class Notepad_fr_saved extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.savelist);
//Liste des sauvegardes
ListView notePadList;
notePadList = (ListView) findViewById(R.id.liste1);
String[] titles = {
"France","USA"};
ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(
this,
android.R.layout.activity_list_item,
titles);
setListAdapter(adapter);
//Bouton pour retourner à l'accueil
Button button4 = (Button) findViewById (R.id.button4);
button4.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent i = new Intent(Notepad_fr_saved.this, Notepad_fr.class);
startActivity(i);
Notepad_fr_saved.this.finish();
}
});
}
}
J'ai suivi des tutos mais à la finale ça ne ressemble plus a rien...
"France" et "USA" sont des valeurs à titre d'exemple, elles n'ont rien a faire ici.
Ca crashouille pas mal du coup, le switch sur la page n'est plus possible !
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
24 août 2010 à 16:47
24 août 2010 à 16:47
Un code comme
devrait passer.
Essaie.
ListView notePadList = (ListView) findViewById(R.id.liste1);
String[] titles = { "France", "USA" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, titles);
notePadList.setAdapter(adapter);
devrait passer.
Essaie.