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 :

[KSoap] Erreur "Cast Exception Vector<SoapObject> - (Class AsyncTask not found)"


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut [KSoap] Erreur "Cast Exception Vector<SoapObject> - (Class AsyncTask not found)"
    Bonjour tout le monde,

    Cela fait depuis ce matin que je me casse la tête à chercher la solution.

    Alors quand j’exécute Myclass.execute(Params) qui étend la classe AsyncTask<String,Void,SoapObject>(Pour ma part),

    la fonction passe bien par "doInBackground", mais une fois arrivé à mon return, il génère une exception pour me prévenir qu'il ne trouve pas la class AsyncTasck.class... Et je soupçonne qu'il y en a d'autres...

    Alors j'ai vu qu'il y en a qui on eu aussi ce souci avec d'autres classes, mais peu d'explication pour le résoudre(A part l'ajouter dans le Builtpath, mais en vain) :/.

    J'ai essayé par exemple ceci, mais rien y fait -> http://android.opensourceror.org/201...ndroid-source/.

    J'ai essayé d'ajouter, d’attacher,..., mais toujours le même problème ou alors il y a y une erreur dans le builtPath entre les éléments ajoutés.

    Je réalise l'application en Jelly Bean(16). J'ai tout installé du JDK Manager il y a +-5 jours...Donc je suppose que je suis à jour. Est-ce que j'ai bien fait de tout installer, toutes les versions?(Comme ça c'était fait)

    Alors est-ce que quelqu'un a un idée sur ce soucis là...

    Est-ce que je dois attacher cette classe quelques parts, avec quel chemin je dois l'attacher par exemple?

    Est-ce que je devrais changer de méthodes pour créer un thread?

    Enfin je vous remercie 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
    Bonjour,

    1. AsyncTask faisant partie du SDK android de base, il n'y a rien besoin d'installer (d'ailleurs le simple fait de passer dans le doInBackground veut dire que tout s'est bien passé coté class-loader).

    2. Le logcat *complet* (avec toute la stacktrace) est indispensable en cas d'erreur (et pas seulement le nom de l'erreur).

    3. Un petit peu de code serait pas mal, pour voir comment tout cela est appelé.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Bonsoir,

    Alors pour ma part, j'ai trouvé le soucis du debug. Il suffit de ne pas cliquer sur le pas avancer info...

    Pour les logs impossible de t'en montrer, ils ont disparu depuis que j'ai cliqué une fois sur clean et ils ne sont jamais revenus...XD.

    Maintenant je suis bloqué plus loin...

    Cette après-midi, je suis arrivé à avoir comme retour Vector<SoapObject>; Une fois que j'ai vu que cela fonctionnait, je suis partit faire plusieurs choses comme parser le vecteur. Mais seulement quelques heures après, par enchantement, j'ai maintenant un "class cast exception" qui est apparu... alors que je n'ai pas changé la fonction si dessous :

    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
     
    	protected Vector<SoapObject> doInBackground(String... methode) {
     
    		try{
     
     
    			SoapObject Request = new SoapObject(NAMESPACE, methode[0]);
     
    	        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
     
    	        envelope.dotNet = true;
     
    	        envelope.setOutputSoapObject(Request);
     
    	        HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS);
     
    	        androidHttpTransport.call(SOAP_ACTION, envelope); 
     
     
    	        return ((Vector<SoapObject>)envelope.getResponse());
     
    		}catch(Exception e){
    			Log.wtf("ERROR web Service Load", e.getMessage());
    			e.printStackTrace();
    			return null;
    		}
    	}
    Et Shéma XML ->
    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
     
    <ArrayOfBoutique xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ProjetBoutique.com/">
    	<Boutique>
    		<Id>3</Id>
    		<Secteur>2</Secteur>
    		<Nom>Boutique situé à Strasse</Nom>
    		<Description>Boutique situé à Strasse</Description>
    	</Boutique>
    	<Boutique>
    		<Id>4</Id>
    		<Secteur>1</Secteur>
    		<Nom>Boutique de Bruxelles</Nom>
    		<Description>Boutique de Bruxelles</Description>
    	</Boutique>
    	<Boutique>
    		<Id>5</Id>
    		<Secteur>1</Secteur>
    		<Nom>Bruxelles pour les grosses affaire</Nom>
    		<Description>Bruxelles pour les grosses affaire</Description>
    	</Boutique>
    	<Boutique>
    		<Id>8</Id>
    		<Secteur>1</Secteur>
    		<Nom>plop</Nom>
    		<Description>plop</Description>
    	</Boutique>
    </ArrayOfBoutique>
    J'ai vu que plusieurs personnes faisait cela..

    Une idée?

  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
    Pareil... logcat nécessaire....

    Un truc... ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Log.wtf("ERROR web Service Load", e.getMessage());
    e.printStackTrace();
    N'est pas très utile sous android....

    D'abord wtf doit être reservé à des truc vraiment bizarres... Un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Log.e("SoapServiceTask","ERROR web Service Load", e);
    permettra d'avoir: le logcat, l'erreur, et de pouvoir filtrer sur "SoapServiceTask".
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Bonjour à toi,

    Alors après avoir retrouvé l'affichage des logs, voici ce que la commande donnée obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    10-23 06:51:12.905: E/Trace(1455): error opening trace file: No such file or directory (2)
    10-23 06:51:21.395: E/SoapServiceTask(1455): ERROR web Service Load
    10-23 06:51:21.395: E/SoapServiceTask(1455): java.lang.ClassCastException: org.ksoap2.serialization.SoapObject cannot be cast to java.util.Vector
    10-23 06:51:21.395: E/SoapServiceTask(1455): 	at com.example.projetboutique.webservice.GetBoutiqueWebService.doInBackground(GetBoutiqueWebService.java:68)
    10-23 06:51:21.395: E/SoapServiceTask(1455): 	at com.example.projetboutique.webservice.GetBoutiqueWebService.doInBackground(GetBoutiqueWebService.java:1)
    10-23 06:51:21.395: E/SoapServiceTask(1455): 	at android.os.AsyncTask$2.call(AsyncTask.java:287)
    10-23 06:51:21.395: E/SoapServiceTask(1455): 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    10-23 06:51:21.395: E/SoapServiceTask(1455): 	at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    10-23 06:51:21.395: E/SoapServiceTask(1455): 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    10-23 06:51:21.395: E/SoapServiceTask(1455): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    10-23 06:51:21.395: E/SoapServiceTask(1455): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    10-23 06:51:21.395: E/SoapServiceTask(1455): 	at java.lang.Thread.run(Thread.java:856)
    si ca peut aider, voici ce que je récupère en faisant SoapObject.toString():

    anyType{Boutique=anyType{Id=3; Secteur=2; Nom=Boutique situé à Strasse; Description=Boutique situé à Strasse; }; Boutique=anyType{Id=4; Secteur=1; Nom=Boutique de Bruxelles; Description=Boutique de Bruxelles; }; Boutique=anyType{Id=5; Secteur=1; Nom=Bruxelles pour les grosses affaire; Description=Bruxelles pour les grosses affaire; }; Boutique=anyType{Id=8; Secteur=1; Nom=plop; Description=plop; }; }
    Pour l'instant voici ma solution en évitant le Vector:
    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
     
        private Boutiques parseSoapObjectToListeBoutique(SoapObject object){
        	Boutiques listes = new Boutiques();
        	for (int i = 0 ; i< object.getPropertyCount();i++) {
     
        		SoapObject soapObject = (SoapObject)object.getProperty(i);
     
    			Boutique boutique = new Boutique();
    			boutique.setId(Integer.parseInt(soapObject.getPropertyAsString("Id")));
    			boutique.setSecteur(Integer.parseInt(soapObject.getPropertyAsString("Secteur")));
    			boutique.setNom(soapObject.getPropertyAsString("Nom"));
    			boutique.setDescription(soapObject.getPropertyAsString("Description"));
    			listes.getBoutiquese().add(boutique);
    		}
        	return listes;
        }
    Pas trop grave, mais si quelqu'un a meilleur solution, je suis preneur .

  6. #6
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Je trouve l'erreur clair!

    Tu essayes d'utiliser un SoapObject comme vecteur. Le cast est impossible. Donc ta solution est bonne.

    Solution :
    Il faut parcourir ton SoapObject:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SoapObject _ret = (SoapObject) _envelope.getResponse ();
    int _len = _ret.getPropertyCount ();
     
    for (int _i = 0; _i < _len; _i++)
    {
    	// Récupération des valeurs avec _ret.getProperty (_i);
    }
    Sinon, tu as des outils qui crée directement tes classes pour parser tes valeurs à partir d'un wsdl : http://sourceforge.net/projects/ksoap2genstub/files/

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    Merci à toi.

    Effectivement, cela marche parfaitement comme ça.

    J'ai juste un soucis pour parser les propriétés byte[].

    Pour l'instant je le récupère en un String, en sachant que je ne peux pas avoir un String de la taille de 800 000 caractères par exmple, donc je divise en segeemnt de 20 000 par String.subString et inject dans un byte[800 000] à leur place un par un...

    Une autre idée par hasard?

  8. #8
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Je ne sais pas trop. J'aurais tenté de le sauvegarder dans un Object.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/03/2015, 11h18
  2. Réponses: 2
    Dernier message: 26/02/2014, 14h35
  3. Erreur lors de la connexion à la BDD Oracle - timezone region not found
    Par Taigong62 dans le forum Connexions aux bases de données
    Réponses: 0
    Dernier message: 03/10/2013, 10h51
  4. Message d'erreur "Class 'DB' not found"
    Par reman dans le forum Langage
    Réponses: 8
    Dernier message: 26/11/2008, 16h49
  5. erreur Class Cast Exception
    Par friedamichelle dans le forum Langage
    Réponses: 3
    Dernier message: 25/05/2008, 16h54

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