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

Windev Mobile Discussion :

Un listener java dans WINDEV MOBILE ANDROID : le retour [WM18]


Sujet :

Windev Mobile

  1. #1
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut Un listener java dans WINDEV MOBILE ANDROID : le retour
    Bonsoir

    Je réactive ce sujet en recréant un nouveau post (l'ancien avait un peu dérivé....), car je n'ai toujours pas de réponse.

    Je cherche à développer une application qui va faire appel à des fonctionnalités du SDK et des librairies java externes.

    La particularité est l'utilisation de l'opération "new" afin de créer de manière dynamique des instances de listener ou d'interface qui vont être appelées pour envoyer des informations à mon application.

    Par exemple, j'aurai dans mon application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    findViewById(R.id.myid).setOnClickListener(new OnClickListener() {
                public void onClick(View v){...}
            }));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    AntPlusGeocachePcc.requestListAndRequestAccess(this,
                    new IPluginAccessResultReceiver<AntPlusGeocachePcc>()
                            {                   
                                @Override
                                public void onResultReceived(AntPlusGeocachePcc result, int resultCode,
                                        int initialDeviceStateCode)
    qui crée une interface avec la méthode onResultReceived....

    Ces opérations sont mises dans une méthode "public static" considérée comme procédure globale de mon application.

    Pas de souci pour la compilation et le lancement sur mon smartphone. Par contre, visiblement lorsque l'interface ou le listener est sollicité pour recevoir des informations, alors j'ai un plantage de mon application...

    Questions :
    - Est-ce que c'est une limitation de Windev Mobile et en particulier le fait que la procédure globale appelée est de type "static" ?
    - Est ce que quelqu'un a des exemples d'intégration de listener java dans une application Windev Mobile Android ?

    Cordialement.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    Bon, cela devient une habitude ... je vais me répondre.

    Pour ceux qui vont trouver la suite intéressante, ne pas oublier de plusser SVP ! Merci d'avance.

    Cela faisait plusieurs mois que je tournais autour .... et j'avais adopté d'autres solutions, mais j'ai enfin trouvé pourquoi mon application se plantait.

    En fait, la création de listener, ou d'interfaces en utilisant la commande "new" va créer un thread secondaire. Si dans ce thread secondaire vous essayez bestialement de modifier des éléments de l'interface principale, que vous avez obtenu avec des getView et qui en fait appartiennent au thread principal, cela plante l'application !

    Ce qu'il faut faire, c'est passer par une procédure WL "proxy" en l'appelant avec la commande 'appelProcedureWL' (qui été introduite à partir de la v17). Dans la procédure proxy WL, vous pouvez ensuite appeler la procédure locale qui va modifier l'interface, à l'aide de la commande : "ExécuteThreadPrincipal".

    J'ai posté tous les éléments détaillés sur la doc en ligne de PCSOFT :
    http://doc.pcsoft.fr/fr-fr/?9000011&...isir-code-java
    http://doc.pcsoft.fr/fr-fr/?particul...s-pour-android

    Et je vous donne un exemple de création d'interfaces :

    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
    // développé dans le cadre d'une application de communication ANT+
     
    // appel d'une requête pour récupérer des éléments et création des interfaces en dynamique
    AntPlusGeocachePcc.requestListAndRequestAccess(myContext,
     
    /////////////////////////////////////////
          // 1ere interface
    new IPluginAccessResultReceiver<AntPlusGeocachePcc>()
    {
    @Override
    public  void onResultReceived(AntPlusGeocachePcc result, int resultCode, int initialDeviceStateCode)
    {
    //myTextViewG1.setText("avant switch");
     
    switch(resultCode)
    {
    ////////////////////
    case AntPluginMsgDefines.MSG_REQACC_RESULT_whatSUCCESS:
    geoPcc = result;
    geoPcc.requestCurrentDeviceList();
    Toast.makeText(getApplicationContext(), "Success Plugin", Toast.LENGTH_SHORT).show();
    break;
    ////////////////
     
    ////////////
    case AntPluginMsgDefines.MSG_REQACC_RESULT_whatCHANNELNOTAVAILABLE:
    Toast.makeText(getApplicationContext(), "Channel not available", Toast.LENGTH_SHORT).show();
    break;
    ////////////
     
    ///////////////
    case AntPluginMsgDefines.MSG_REQACC_RESULT_whatOTHERFAILURE:
    Toast.makeText(getApplicationContext(), "Other failure", Toast.LENGTH_SHORT).show();
    break;
    ////////////
     
    ////////////////
    case AntPluginMsgDefines.MSG_REQACC_RESULT_whatDEPENDENCYNOTINSTALLED:
    Toast.makeText(getApplicationContext(), "Dependency not installed", Toast.LENGTH_SHORT).show();
    break;
    ////////////////
     
    //////////
    case AntPluginMsgDefines.MSG_REQACC_RESULT_whatUSERCANCELLED:
    Toast.makeText(getApplicationContext(), "User cancelled", Toast.LENGTH_SHORT).show();
    break;
    ////////////
     
    default:
    Toast.makeText(getApplicationContext(), "Unrecognized result", Toast.LENGTH_SHORT).show();
    break;
    }
    }
    },
     
    ///////////////////////////////////////////////////
    //Receives state changes and shows it on the status display line
    // 2eme interface
    new IDeviceStateChangeReceiver()
    {
     
    @Override
    public  void onDeviceStateChange(final int newDeviceState)
    {
    Toast.makeText(getApplicationContext(), "device state "+geoPcc.getDeviceName() + ": " + AntPlusGeocachePcc.statusCodeToPrintableString(newDeviceState), Toast.LENGTH_SHORT).show();
     
    if(newDeviceState == AntPluginMsgDefines.DeviceStateCodes.DEAD)
    geoPcc = null;
     
    }
    }
     
    // virgule pour le parametre suivant
    ,
    ///////////////////////////////////////////////////
    //Receives the device list updates and displays the current list
    // 3eme interface
    new IAvailableDeviceListReceiver()
    {
    @Override
    public  void onNewAvailableDeviceList(int[] deviceIDs, String[] deviceIdentifierStrings, int changeCode, int changingDeviceID)
    {
    Toast.makeText(getApplicationContext(), "Device list", Toast.LENGTH_SHORT).show();
     
    // appel procédure proxy pour supprimer liste
                           appelProcedureWL("GResetListeDevices");
     
    if(deviceIDs.length != 0)
    {
    //bDevicesInList = true;
    for(int i=0; i < deviceIDs.length; ++i)
    {
    if(deviceIdentifierStrings[i].trim().length() == 0){
    Toast.makeText(getApplicationContext(), "Unprogrammed", Toast.LENGTH_SHORT).show();
    }
    else if(deviceIdentifierStrings[i].contentEquals("_________")){
    Toast.makeText(getApplicationContext(), "Invalid", Toast.LENGTH_SHORT).show();
    }
     
    // appel procédure pour afficher Toast avec WL appelProcedureWL("ToastDevices",deviceIdentifierStrings[i]+"/ "+ Integer.toString(deviceIDs[i]));
     
    // appel procédure proxy pour ajouter éléments dans liste appelProcedureWL("GAjouteDeviceListe",deviceIdentifierStrings[i],Integer.toString(deviceIDs[i]));
     
    }
    }
    else
    {
    Toast.makeText(getApplicationContext(), "No device found", Toast.LENGTH_SHORT).show ();
     
    }
    }
    }
    );

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

Discussions similaires

  1. Comment intégrer un listener Android dans WINDEV MOBILE
    Par courdi95 dans le forum Windev Mobile
    Réponses: 27
    Dernier message: 28/04/2018, 10h33
  2. [WM18] Mettre du Java dans Windev Mobile sous Android(Appelle Natif
    Par LONTSIE dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 16/07/2014, 08h19
  3. tester le HTTPS avec java dans un Mobile
    Par roujij dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 27/04/2009, 12h55
  4. intégrer du code java dans windev
    Par akremb22 dans le forum WinDev
    Réponses: 1
    Dernier message: 15/04/2008, 17h28

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