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 :

ClassNotFoundException que sur Android


Sujet :

Android

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut ClassNotFoundException que sur Android
    Bonjour à tous!J
    Je débute dans le développement Android, et j'ai un soucis!
    Ce code en rouge marche trés bien sur Ubuntu, mais quand je l'utilise sur Android, j'ai droit à un joli "ClassNotFoundException".
    Alors que j'utilise le même fichier dans les deux cas!
    Quelqu'un a une idée?
    Merci!

    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
    package com.android.Gnealogy;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class Chargement {
    	public static Arbre charger(String strPathFile, MainFrame main){
    		Arbre chargerArbre = null;
    		int i = 0;
    		try {
    			i = 0;
            	FileInputStream objFile= new FileInputStream(strPathFile);
            	i++;
            	ObjectInputStream ois= new ObjectInputStream(objFile);
            	i++;
                // désérialisation : lecture de l'objet depuis le flux d'entrée
                    chargerArbre=  (Arbre) ois.readObject();
            	i++;
            	objFile.close();
            	i++;
            	ois.close();
            	i++;
            	TextView tv = new TextView(main);
            	tv.setText(chargerArbre.toString());
            	main.setContentView(tv);
            }
            catch (FileNotFoundException objError) {
            	Toast.makeText(main, "Fichier non trouvé\n"+objError.toString(), Toast.LENGTH_LONG).show();
            } catch (IOException e) {
            	Toast.makeText(main, "IOException\n"+e.toString(), Toast.LENGTH_LONG).show();
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
            	Toast.makeText(main,i+ "\nClassNotFoundException\n"+e.toString()+"\n"+e.getCause(), Toast.LENGTH_LONG).show();
    			e.printStackTrace();
    		}
    		return chargerArbre;
    	}
    }

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Elle est défini où ta classe "Arbre"?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut
    Dans le même package :

    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
    package com.android.Gnealogy;
    import java.io.*;
     
     
    public class Arbre implements Serializable {
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	Person root;
            String name;
    	public Person getRoot() {
    		return root;
    	}
     
    	public void setRoot(Person root) {
    		this.root = root;
    	}
     
    	public Arbre(){
    		root = new Person();
    	}
     
    	public Arbre(Person pers){
    		root = pers;
    	}
     
    	public void save(String URL){
                    if(!URL.contains(".gnl"))
                             URL += ".gnl";
    		String URLbis = URL;
    		File f = new File(URLbis.substring(0, URLbis.lastIndexOf('/')));
    		f.mkdirs();
     
    	 try {
           FileOutputStream fos = new FileOutputStream(URL);
           // création d'un "flux objet" avec le flux fichier
           ObjectOutputStream oos= new ObjectOutputStream(fos);
           try {
                 // sérialisation : écriture de l'objet dans le flux de sortie
                 oos.writeObject(this);
                 // on vide le tampon
                 oos.flush();
                 }
           finally{
                     //fermeture des flux
                     try{
                         oos.close();
                         }
                     finally { fos.close();}
                     }
                 } catch(IOException ioe) {
                	 System.out.println("Sauvegarde");
                	 System.out.println(ioe);
                 }
    }
    	public String toString(){
    		String c="";
    		c = root.toString();
    		return c;
    	}
     
    }
    Edit :
    En fait, la méthode "Save" ici, ne fonctionne pas non plus... Elle me renvoie un "FileNotFoundException" alors qu'elle marche trés bien sur Ubuntu...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    FileNotFoundException, uniquement sur le périphérique, c'est bien possible que ce soit due à l'interdiction d'accès à la carte SD quant le périphérique est branché.
    Il suffit alors, d'éteindre le périphérique de stockage.
    À partir de l'ordinateur ou bien du périphérique lui-même.
    Du-coup la carte SD sera "libérée" et pourra être utilisée par le périphérique.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut
    Même lorsque je débranche mon Gphone du pc, il y a une FileNotFoundException...
    A croire que je n'utilise pas la bonne synthaxe?

    Pour acceder au répertoire Gnealogy de la carte SD je dois bien dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String strPathFile = "/sdcard/Gnealogy/testPrincipal2.gnl";
    non?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Citation Envoyé par Boulette Man Voir le message
    Même lorsque je débranche mon Gphone du pc, il y a une FileNotFoundException...
    A croire que je n'utilise pas la bonne synthaxe?
    Le dossier existe il ?
    Ah oui, il y a une fonction de création automatique, ok.

    La syntaxe est bonne en tout cas.

    Si j'étais toi, je testerai l'enregistrement de fichier le plus simple du monde pour voir si déjà ça plante.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut
    Oui, le dossier Gnealogy existe.
    Et le fichier "testprincipal2.gnl" ne change rien, qu'il existe, ou non...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut
    En fait, je viens de trouver ca pour le "ClassNotFoundException", mais je ne comprend pas bien la solution qui est proposé...

    http://stackoverflow.com/questions/3...foundexception


    On pourrait m'eclairer sur cette réponse svp?

    Edit :

    Toujours sur ce probléme de ClassNotFoundException, sachant que l'enregistrement que je veux lire a été fait à partir d'une autre classe "Arbre" qui n'a de différent que le package, est-ce possible qu'il y ai un probléme à ce niveau la?

  9. #9
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    En faite, ils te conseillent de passer par un type de fichier maitrisé (xml par exemple) pour stocker les informations relatives à ton objet, et de créer toi même le principe de sérialisation/dé-sérialisation d'objet.
    (enfin si j'ai bien compris ^^)
    Ainsi, tu seras pleinement compatible entre toutes les versions/types des différents JVM.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Citation Envoyé par Boulette Man Voir le message
    Toujours sur ce probléme de ClassNotFoundException, sachant que l'enregistrement que je veux lire a été fait à partir d'une autre classe "Arbre" qui n'a de différent que le package, est-ce possible qu'il y ai un probléme à ce niveau la?
    Il me semble que pour déserializer un objet, il faut qu'il soit de la même Class, comprenant le nom du package.
    Pourquoi un autre package si la Class est la même, deux Classes identiques ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut
    En fait, j'ai fait un programme PC, sur lequel on peut créer son arbre généalogique.
    Et je voudrais qu'on puisse également le modifier par un programme androïd.
    Donc il y a la classe "arbre" dans mon programme "PC" et la classe "arbre" dans le programme "Androïd", qui sont exactement identique, à part le package...

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Citation Envoyé par Boulette Man Voir le message
    Donc il y a la classe "arbre" dans mon programme "PC" et la classe "arbre" dans le programme "Androïd", qui sont exactement identique, à part le package...
    Il faut la mettre dans un package à part, faire une bibliothèque en somme.

    Un ".jar" dédié aux deux applications, importé dans chacune en temps que bibliothèque.

    PS: c'est vrai que la sérialisation n'est pas faite pour ça, utiliser un fichier xml par exemple comme le propose MrDuChnok est une bien meilleur solution.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut
    Bon, le chargement marche bien!
    Maintenant, il reste ce probléme de save à regler!
    Si jamais il vous vient une idée merveilleuse, je suis preneur ^^

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Citation Envoyé par Boulette Man Voir le message
    Bon, le chargement marche bien!
    Maintenant, il reste ce probléme de save à regler!
    Si jamais il vous vient une idée merveilleuse, je suis preneur ^^
    J'ai une idée merveilleuse.
    Vérifie la chaine du chemin d'accès au fichier.
    Affiche la par exemple dans la console avec System.out.println(chemin);
    Ou bien avec une fenêtre de dialog Android.
    Ça viens sans doute d'une coquille ou un truc du genre, un slash en trop, etc.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut
    Beh, j'utilise exactement le même String, pour faire la save et le chargement... Donc je ne vois pas pourquoi il ne trouve pas le fichier...


    Edit : Une bonne et heureuse année à vous tous!

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Citation Envoyé par Boulette Man Voir le message
    Beh, j'utilise exactement le même String, pour faire la save et le chargement... Donc je ne vois pas pourquoi il ne trouve pas le fichier...
    Oui, dans ce cas, mais si tu utilises sur un téléphone et sur l'ordinateur, qui enregistre et qui charge ?

    Ça ne coute rien de vérifier en tout cas, des fois une erreur inattendue ce glisse dans un truc tout simple et on perd 3h à fouiller partout pour rien, croie en mon expérience !

    Ton exception sort d'où ? Car tu ne la captures pas il me semble...

    Sinon, tu n'utilises pas très bien "try catch", on peut faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try{
    // blablabla, du code qui peut lever des exeptions
    }catch(FileNotFoundExeption ex){
    // ya pas de fichier, c sans doute la SD qui est prise ...
    }catch(IOExeption ex){
    // ba là c encore pire, donc on met après le catch moins pire
    }

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut
    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 URL){
            if(!URL.contains(".gnl"))
                     URL += ".gnl";
            String URLbis = URL;
    		File f = new File(URLbis.substring(0, URLbis.lastIndexOf('/')));
            Toast.makeText(this, f.getPath(), Toast.LENGTH_LONG).show();
    		f.mkdirs();
    		int i= 0;
    	try {
    	 i = 0;
    	 // ouverture d'un flux de sortie vers le fichier "save.ser"
    	FileOutputStream fos = new FileOutputStream(URL);
    	i++;
    	// création d'un "flux objet" avec le flux fichier
    	ObjectOutputStream oos= new ObjectOutputStream(fos);
    	i++;
        	 // sérialisation : écriture de l'objet dans le flux de sortie
        	 oos.writeObject(this);
    	i++;
        	 // on vide le tampon
        	 oos.flush();
    	i++;
    	 oos.close();
    	i++;
    	 }
    	 catch(FileNotFoundException ex){
    	        Toast.makeText(this,i + "\nFileNotFoundException\n"+ex.toString()+"\n"+ex.getCause(), Toast.LENGTH_LONG).show();
    	}
    	  catch(IOException ioe) {
    	        Toast.makeText(this, i +"\nIOException\n"+ioe.toString()+"\n"+ioe.getCause(), Toast.LENGTH_LONG).show();
    	 }
    }
    Et voici comment je test mes "save" et mes "charge" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            String strPathFile = "/sdcard/Gnealogy/test.gnl";
            //Chargement.charger(strPathFile, this);
            //testSave
            test();
            save(strPathFile);
        }
    Et donc en fonction de ce que je veux faire (charger ou sauvegarder, je commente une des lignes)
    Sinon d'aprés mon erreur viens de la ligne en rouge. C'est vrai que le fichier "test.gnl" n'existe pas, mais je veux justement qu'il soit créé ^^
    Ce code marche bien sur PC pourtant...

    EDIT :
    Lorsque j'execute ce code, on me dit que je n'ai pas le droit d'écrire sur la carte... J'aurais un probléme de droit d'écriture vous croyez?

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Bon, j'ai testé pour toi vu que tu semble bien en galère :

    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
    package org.me;
     
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
     
    public class Serial implements Serializable {
     
    	public void save(String URL) {
    		if (!URL.contains(".gnl"))
    			URL += ".gnl";
    		final String URLbis = URL;
    		final File f = new File(URLbis.substring(0, URLbis.lastIndexOf('/')));
     
    		f.mkdirs();
    		try {
    			// ouverture d'un flux de sortie vers le fichier "save.ser"
    			final FileOutputStream fos = new FileOutputStream(URL);
    			// création d'un "flux objet" avec le flux fichier
    			final ObjectOutputStream oos = new ObjectOutputStream(fos);
    			// sérialisation : écriture de l'objet dans le flux de sortie
    			oos.writeObject(this);
    			// on vide le tampon
    			oos.flush();
    			oos.close();
    		} catch (final Exception ex) {
    			System.out.println("ERREUR");
    			System.out.println(ex.toString());
    		}
    	}
     
    }
    Le code de l'Activity :

    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
    package org.me;
     
    import android.app.Activity;
    import android.os.Bundle;
     
    public class Main extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            Serial a = new Serial();
    	a.save("/sdcard/Gnealogy/test.gnl");
     
        }
    }
    Ça marche très bien, sauf quant la carte SD est utilisée, là il y a une belle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.io.FileNotFoundException: /sdcard/Gnealogy/test.gnl
    Donc, je ne tombe pas des nues, c'est bien ce que je pensai depuis le début...

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 35
    Par défaut
    Beh, même si je débranche mon téléphone du PC, ca ne marche pas...
    Comment je peux savoir si ma carte SD est utilisé même si mon téléphone n'est branché nul part?
    J'ai du loupé un truc tout con :/
    Désolé de vous faire perdre du temps sur ca ^^

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Citation Envoyé par Boulette Man Voir le message
    Beh, même si je débranche mon téléphone du PC, ca ne marche pas...
    Comment je peux savoir si ma carte SD est utilisé même si mon téléphone n'est branché nul part?
    J'ai du loupé un truc tout con :/
    Désolé de vous faire perdre du temps sur ca ^^
    C'est vrai que quand je débranche du PC, la carte SD ce prépare d'elle meme, ça m'affiche un message..

    Moi, même branché, je peux désactiver le stockage en glissant depuis le haut le panneau et j'ai alors une proposition "Éteindre le périphérique de stockage", mais il me reste toujours le débogage.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/06/2013, 17h22
  2. [RMI] ClassNotFoundException que je ne comprends tjs pas
    Par Satch dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 10/05/2007, 12h07
  3. Afficher un alert autrement que sur onclick
    Par haigwepa dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/02/2005, 16h47
  4. Réponses: 5
    Dernier message: 18/09/2004, 21h30

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