PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → [WM16] Appel d'une procédure WM à partir d'un code java
[WM16] Appel d'une procédure WM à partir d'un code java
Débuté par jj_monot, 12 déc. 2011 19:41 - 9 réponses
Posté le 12 décembre 2011 - 19:41
Bonjour,

Je ne suis pas encore en WM17 ! mais bientôt ...

J'arrive sans souci maintenant à créer des fonctions et classes écrites en Java dans une application Android Windev Mobile.

Donc, WM -> java : ok

Par contre, maintenant, je voudrais pouvoir appeler une procédure WM (globale ou non) à partir d'une fonction Java. Donc faire : java -> WM

J'ai essayé en utilisant un code du style :
===============================================
// déclaration View pour la fenêtre FEN_carte
static ViewGroup FEN_carte;

// récupération d'un handler sur la fenêtre FEN_carte
FEN_carte = (ViewGroup) getView ("FEN_carte");

//La fenêtre FEN_carte comprend une procédure locale "Essai" écrite en WM pur
FEN_carte.Essai();
===========================================
Lors de la compilation, j'obtiens une erreur ....
"cannot find symbol symbol : method Essai()"

On a l'impression que cela le veut presque ... il faudrait juste passer l'étape de la déclaration de la procédure de la fenêtre ....

Est-ce que qqun sait comment déclarer l'existence de la méthode quelque part, comme on le ferait avec un header .h en C?

Ou sait comment appeler une procédure WM dans une procédure java dans WM ?
Posté le 13 décembre 2011 - 00:37
En fouillant dans le jar généré, les fonctions semblent être renommées avec un fWD_ devant :

fWD_xxxxxxxxx ou xxxxxxxx est le nom android de la fonction en WL.

tu peux essayer dans ce sens.

tu as écris une classe GPS alors?

MONOT a écrit dans le message de news <fd6513db40e56e88e893ba013cdbec6b@news.pcsoft> :
Bonjour,

Je ne suis pas encore en WM17 ! mais bientôt ...

J'arrive sans souci maintenant à créer des fonctions et classes écrites en Java dans une application Android Windev Mobile.

Donc, WM -> java : ok

Par contre, maintenant, je voudrais pouvoir appeler une procédure WM (globale ou non) à partir d'une fonction Java. Donc faire : java -> WM

J'ai essayé en utilisant un code du style :
===============================================
// déclaration View pour la fenêtre FEN_carte
static ViewGroup FEN_carte;

// récupération d'un handler sur la fenêtre FEN_carte
FEN_carte = (ViewGroup) getView ("FEN_carte");

//La fenêtre FEN_carte comprend une procédure locale "Essai" écrite en WM pur
FEN_carte.Essai();
===========================================
Lors de la compilation, j'obtiens une erreur ....
"cannot find symbol symbol : method Essai()"

On a l'impression que cela le veut presque ... il faudrait juste passer l'étape de la déclaration de la procédure de la fenêtre ....

Est-ce que qqun sait comment déclarer l'existence de la méthode quelque part, comme on le ferait avec un header .h en C?

Ou sait comment appeler une procédure WM dans une procédure java dans WM ?
Posté le 13 décembre 2011 - 00:38
pour préciser:

si il y a un parametre à la fonction le paramètre devient un type WDObject

ex: en WL la fonction mafonction(monparam est une geoposition) devient en source android fWD_mafonction(WDObject paramWDObject1)
le package associé est com.masociete.monappli.wdgen;

WDObject est un type du framework (fr.pcsoft.wdjava.framework)
Posté le 13 décembre 2011 - 12:30
Génial !

Je vais l'essayer tout de suite ! et je reviens faire un CR.

Comment as tu trouvé cette astuce ? Tout seul ? As-tu dézippé l'.apk et regardé dedans ?

Merci en tout cas.
Posté le 13 décembre 2011 - 13:50
Après l'espoir, le désespoir ....

Effectivement en utilisant apktool sur l'apk généré, on voit apparaître la méthode "fWD_essai2" (correspondant à la procédure locale "essai2"), dans la classe "GWDFFEN_carte" (correspondant à la fenêtre "FEN_carte")....

Mais je n'arrive pas à créer un appel à cette méthode sans avoir une erreur au moment de la génération du programme ....

======mon code dans la procédure java ==============
GWDFFEN_carte.fWD_essai2 ();
===================================================

J'obtiens l'erreur suivante :

================================================
Erreur retournée :
src\com\masociete\osmdroid\wdgen\GWDCPCOL_OSMDroid.java:133: non-static method fWD_essai2() cannot be referenced from a static context
GWDFFEN_carte.fWD_essai2 ();
^
1 error
===============================================


Une idée ??
Posté le 31 mai 2013 - 07:52
Cette fonctionnalité est maintenant disponible dans wm depuis la v17 et est décrite dans la doc (saisir du code Java).

Ce qui m'intéresse maintenant c'est comment interagir avec des classes externes proposant/utilisant des interfaces ou des listeners !

Je suis coincé!
Posté le 31 mai 2013 - 14:27
Il est possible d'ajouter des librairies externes dans l'assistant de génération.
Il est ensuite possible de les utiliser directement dans le code natif en ajoutant les import qui vont bien.
Posté le 31 mai 2013 - 16:36
wddev a écrit :
Il est possible d'ajouter des librairies externes dans l'assistant de génération.
Il est ensuite possible de les utiliser directement dans le code natif en ajoutant les import qui vont bien.


Merci pour la réponse. Mais cela je le sais.

Par contre essayer pour voir de créer un listener ou une interface ....
Posté le 31 mai 2013 - 17:06
Il est possible de créer des classes (ou des interfaces) directement dans la même vue de code que les procédures en code natif.
Posté le 31 mai 2013 - 18:33
Bonsoir

Je suis preneur d'un exemple ... création d'une classe, implémentation d'une interface, les deux étant intégrés dans une application WM Android.

Les essais que j'ai fait en implémentant une interface ce sont soldés par un plantage de l'application ....

La compilation, tout cela était nickel...

Je suis peut être passé à côté de quelque chose....