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 :

Plantage lorsque l'application est quittée


Sujet :

Android

  1. #1
    Membre actif Avatar de IsiTech
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Points : 268
    Points
    268
    Par défaut Plantage lorsque l'application est quittée
    Bonsoir,

    Je débute en programmation Android avec une application simple de bloc-note. Hors je bute sur une erreur. Lorsque j'appui sur le bouton "Home" dans l'émulateur, l'application plante avec le message "The application IsiNotePad (process com.IsiTech.Android.IsiNotePad) has stopped unexpectedly. Please try again."

    Voici le code de mon activité :

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    package com.IsiTech.Android.IsiNotePad;
     
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class IsiNotePadActivity extends Activity {
    	private final static String NOTES = "notes.txt";
    	private TextView editor;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            // Set the TextView
            editor = (TextView) findViewById(R.id.note);
        }
     
    	@Override
    	protected void onResume() {
    		super.onResume();
     
    		// Add previous text
    		String str = readNote();
    		editor.setText(str);
    	}
     
    	@Override
    	protected void onPause() {
    		super.onPause();
     
    		// Save the text
    		String str = (String) editor.getText();
    		writeNote(str);
     
    	}
     
    	@Override
    	protected void onStop() {
    		super.onStop();
    	}
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		super.onCreateOptionsMenu(menu);
     
    		// Mise en place du menu
    		MenuInflater inflater = getMenuInflater();
    		inflater.inflate(R.menu.menu, menu);
     
    		return true;
    	}
     
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		switch (item.getItemId())
    		{
    			case R.id.delete:	// Delete the text
    				editor.setText("");
    				writeNote("");
    				return true;			
    		}
     
    		return super.onOptionsItemSelected(item);
    	}
     
    	/**
             * Read the notes in the file
             * @return
             */
    	public String readNote()
    	{
    		try {
    			InputStream in = openFileInput(NOTES);
     
    			if (in != null) {
    				InputStreamReader tmp = new InputStreamReader(in);
    				BufferedReader reader = new BufferedReader(tmp);
    				String strRead;	//For each line
    				StringBuilder buf = new StringBuilder();
     
    				while ((strRead = reader.readLine()) != null) {
    					buf.append(strRead+"\n");
    				}
     
    				in.close();
    				return buf.toString();
    			}
    		}
    		catch (java.io.FileNotFoundException e) {
    			return "";
    		}
    		catch (Throwable t) {
    			Toast.makeText(this, "Exception: "+t.toString(), Toast.LENGTH_LONG).show();
    		}
     
    		return "";
    	}
     
    	/**
             * Write the note in the file
             */
    	public void writeNote(String noteToWrite)
    	{
    		try {
    			OutputStreamWriter out = new OutputStreamWriter(openFileOutput(NOTES, 0));
     
    			out.write(noteToWrite);
    			out.close();
    		}
    		catch (Throwable t) {
    			Toast.makeText(this, "Exception: "+t.toString(), Toast.LENGTH_LONG).show();
    		}
    	}
     
    }
    J'ai trouvé que le problème survient dans la méthode onPause(), à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String str = (String) editor.getText();
    Si je supprime cette ligne, l'application se quitte sans soucis. Je peux fournir le logcat si nécessaire. Avez vous une idée de ce qui cloche?

    Merci d'avance.

  2. #2
    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
    Et si tu mets le super.onPause() après ?

    J'ai peur que le onPause() ne détruise les views dans certains cas...

    De toute manière, mets nous le LogCat il a normalement toutes les informations nécessaires...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre actif Avatar de IsiTech
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Points : 268
    Points
    268
    Par défaut
    J'ai essayé de mettre le super.onPause() à la fin de la méthode, sans succès. J'ai également viré le onStop() qui ne faisait aucun traitement finalement.

    Voici le logcat :

    (plus nécessaire)

    EDIT : J'ai trouvé, il faut remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String str = (String) editor.getText();
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String str = (String) editor.getText().toString();
    car la méthode getText() renvoit un CharSequence et non un String.

    Merci pour ton aide, résolu !

  4. #4
    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
    Au mon dieu ... comme quoi le LogCat aurait été utile ... avec un gros "ClassCastException" !

    N'empêche règle Java n°1: Le CAST C'EST LE MAL ABSOLU !!!
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/04/2013, 17h50
  2. [Débutant] Ajouter des composant à un control lorsque l'application est déjà exécuté
    Par Gui4257 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 02/07/2012, 20h11
  3. Réponses: 1
    Dernier message: 01/07/2012, 23h04
  4. Réponses: 0
    Dernier message: 26/07/2011, 14h02
  5. Réponses: 3
    Dernier message: 14/03/2009, 09h44

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