EditText Android, sauvegarder le champ ?
Shidy06
-
sandul Messages postés 4013 Statut Membre -
sandul Messages postés 4013 Statut Membre -
Bonjour,
Etant en plein apprentissage de la programmation pour Android, j'utilise Eclipse Helios.
J'ai un souci concernant un EditText.
Le principe (du moins ce que j'aimerais faire), c'est que ce qui est inscrit dans cet EditText soit enregistrer à l'aide d'un clic sur bouton en dessous sur la carte mémoire.
De telle sorte à pouvoir consulter le contenu plus tard au format TextView.
Le problème c'est que je ne trouve pas de tuto sur cette idée la, le principe d'un bloc notes finalement. Ecrire du texte, l'enregistrer et le consulter ultérieurement.
Merci d'avance !
Etant en plein apprentissage de la programmation pour Android, j'utilise Eclipse Helios.
J'ai un souci concernant un EditText.
Le principe (du moins ce que j'aimerais faire), c'est que ce qui est inscrit dans cet EditText soit enregistrer à l'aide d'un clic sur bouton en dessous sur la carte mémoire.
De telle sorte à pouvoir consulter le contenu plus tard au format TextView.
Le problème c'est que je ne trouve pas de tuto sur cette idée la, le principe d'un bloc notes finalement. Ecrire du texte, l'enregistrer et le consulter ultérieurement.
Merci d'avance !
A voir également:
- EditText Android, sauvegarder le champ ?
- Android recovery - Guide
- Presse papier android - Guide
- Begone android - Accueil - Protection
- Sauvegarde android - Guide
- À quoi sert google drive sur 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 !
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
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().
++
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 ?
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 ?
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();
}
}
}
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 :)
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 !
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 !