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

API standards et tierces Android Discussion :

Affichage dans un TextView (socket.io)


Sujet :

API standards et tierces Android

  1. #1
    Membre averti
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Par défaut Affichage dans un TextView (socket.io)
    Bonjour les développeurs !
    J'ouvre un topic car j'ai un problème que je n'arrive pas a résoudre,
    J'ai créer une socket via nodejs qui elle émet un emit qui a pour message "connection ok!" , Ensuite via Android studio je me connecte a ma socket elle émet bien le message "connection ok!" depuis la console mais ce message ne veut pas s'afficher depuis mon TextView.

    Dois créer une autre fonction qui a pour but de gérer le TextView? ou alors autre chose? je vous met mon code ci joint:

    Mon code

    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
    public class MainActivity extends AppCompatActivity {
      TextView MessageSocket;
      @Override
         protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
     
        MessageSocket= (TextView) findViewById(R.id.MessageSocket);
        runIO();
    }
     
     
    public void runIO(){
        try {
            SocketIO socket = new SocketIO("http://10.10.103.36:8080");
            socket.connect(new IOCallback() {
                @Override
                public void onMessage(JSONObject json, IOAcknowledge ack) {
                    try {
                        System.out.println("Server said:" + json.toString(2));
                        MessageSocket.setText(json.toString());
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
     
                @Override
                public void onMessage(String data, IOAcknowledge ack) {
                    System.out.println("Server said: " + data);
     
                }
     
                @Override
                public void onError(SocketIOException socketIOException) {
                    System.out.println("an Error occured");
                    socketIOException.printStackTrace();
                }
     
                @Override
                public void onDisconnect() {
                   System.out.println("Connection terminated.");
                }
     
                @Override
                public void onConnect() {
                    System.out.println("Connection established");
                }
     
                @Override
                public void on(String event, IOAcknowledge ack, Object... args) {
                    System.out.println("Server triggered event '" + event + "'");
                }
            });
     
            // This line is cached until the connection is establisched.
            socket.send("Hello Server!");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    Mon fichier java script

    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
    var http = require('http');
     
    var fs = require('fs');
     
     
     
     
     var server = http.createServer(function(req, res) {
     
     fs.readFile('./index.html', 'utf-8', function(error, content) {
     
        res.writeHead(200, {"Content-Type": "text/html"});
     
        res.end(content);
     
      });
     
      });
     
     
     
      var io = require('socket.io').listen(server);
     
     
     
    io.sockets.on('connection', function (socket) {
     
      console.log('Connection ok!');
       io.sockets.on('connection', function (socket) {
        socket.emit('message', 'Vous êtes bien connecté !');
      });
     
      });
    Merci de vos réponses !

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Salut,

    As-tu défini MessageSocket dans R.layout.activity_main ?

    avec layout_width: match_parent
    layout_height: wrap_content

    Rem: tu peux définir l'accès à RunIO en private ou protected.

  3. #3
    Membre averti
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Par défaut
    Re,

    Merci de ta réponse et oui normalement il est définis puis que je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       MessageSocket= (TextView) findViewById(R.id.MessageSocket);
    Dans le bundle et j'ai bien vérifier l'id du textView et c'est bien MessageSocket ! qui lui est dans le relative layout

  4. #4
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Il te manque l'inflater.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    final LayoutInflater inflater = getLayoutInflater();
    final LinearLayout llFont = (LinearLayout) (inflater.inflate(R.layout.activity_font_preferences, (LinearLayout) findViewById(R.id.llFont)));
     
    (remplace llfont par ta relativeLayout ainsi que dans les CAST, fais un setText de message et setcontenview à la fin de llfont)

    Ex2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    View v = inflater.inflate(R.layout.fragment_search, container, false);
    
    llBookTitle = (LinearLayout) v.findViewById(R.id.llBookTitle);
    btnBookTitle = (Button) v.findViewById(R.id.tvBookTitle);
    
    Button btnBack = (Button) v.findViewById(R.id.btnBack);

  5. #5
    Membre averti
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Par défaut
    Re,
    houla, je pense pas que se sois sa et dans mon code cette proposition ne marche pas mais cependant en faisant plusieurs test j'ai réussit a rapatrié mon flux json depuis ma Socket ici grace la la vairable "event" qui est le premier paramatre de socket.emit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
                    public void on(String event, IOAcknowledge ack, Object... args) {
                        System.out.println("Server triggered event '" + event + "'");
                        try {
                            JSONObject jsonObj = new JSONObject(event);
                            String mpx =jsonObj.getString("mpx");
                            MessageSocket.setText(mpx);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
    Mais le problème c'est que sa prend le premier paramètres de socket.emit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    io.sockets.on('connection', function (socket) {
     
      console.log('Connection ok!');
       io.sockets.on('connection', function (socket) {
        socket.emit({mpx:'1'}, '{message:'Vous êtes bien connecté !'});
      });
     
      });
    et justement j'aimerais qu'il m'affiche le second paramètres qui est {message:'Vous êtes bien connecté !'}et non pas {mpx:'1'}
    Donc dans toutes les méthode de la méthode runIO ou est le deuxième paramètres? et comment l'afficher?
    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
     
        public void  runIO(){
     
            try {
     
                SocketIO socket = new SocketIO("http://192.168.0.22:8080");
                socket.connect(new IOCallback() {
                    @Override
                    public void onMessage(JSONObject json, IOAcknowledge ack) {
                        try {
                            System.out.println("Server said:" + json.toString(2));
     
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
     
                    @Override
                    public void onMessage(String data, IOAcknowledge ack) {
                        System.out.println("Server said: " + data);
     
     
                        //MessageSocket.setText(data);
                    }
     
                    @Override
                    public void onError(SocketIOException socketIOException) {
                        System.out.println("an Error occured");
                        socketIOException.printStackTrace();
                    }
     
                    @Override
                    public void onDisconnect() {
                       System.out.println("Connection terminated.");
                    }
     
                    @Override
                    public void onConnect() {
                        System.out.println("Connection established");
                    }
     
                    @Override
                    public void on(String event, IOAcknowledge ack, Object... args) {
                        System.out.println("Server triggered event '" + event + "'");
                        try {
                            JSONObject jsonObj = new JSONObject(event);
                            String mpx =jsonObj.getString("mpx");
                            MessageSocket.setText(mpx);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
     
     
     
                    }
                });
     
                // This line is cached until the connection is establisched.
                socket.send("Hello Server!");
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

  6. #6
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Je suppose que le 1er paramètre commence à 0

  7. #7
    Membre averti
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Par défaut
    Re,
    mmmh a mon avis plutôt le premier paramètres {mpx:'1'} est stocker dans la variable event mais pour le second '{message:'Vous êtes bien connecté !'} je ne sais pas du tout et c'est celui qui m’intéresse dans le Socket émit

  8. #8
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Débug et mets un break point lors du retour.
    Ensuite tu regardes le contenu et adaptes le code.

  9. #9
    Membre averti
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Par défaut
    Re,
    Le problème c'est pas que mon programme marche pas ! il marche parfaitement mais c'est plus que je n'arrive pas a rapatrié le 2 paramètres de mon socket.emit et la je sèches car j'ai testé pas mal de chose mais en vain sa marche pas....

  10. #10
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Citation Envoyé par akiantor Voir le message
    Re,
    Le problème c'est pas que mon programme marche pas ! il marche parfaitement mais c'est plus que je n'arrive pas a rapatrié le 2 paramètres de mon socket.emit et la je sèches car j'ai testé pas mal de chose mais en vain sa marche pas....
    Essaye de changer la structure du retour.
    Au lieu de vouloir retourner 2 paramètres, concatène les 2 avec § par exemple => val0§val1
    Ensuite tu fais un split sur ce délimiteur et donc tu auras les 2 valeurs

  11. #11
    Membre averti
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Par défaut
    Re,
    j'avais essaye de changer le type de retour de cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
                    public void on(String event, IOAcknowledge ack, Object... args) {
                        System.out.println("Server triggered event '" + event + "'");
                        try {
                            JSONObject jsonObj = new JSONObject(event);
                            String mpx =jsonObj.getString("mpx");
                            MessageSocket.setText(mpx);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
    en changeant le Object...args en String args car je pense que c'est dans arg que se trouve cette fameuse deuxième valeurs mais ceci n'est pas possible car c'est une classe abstraite donc une redéfinition est impossible .
    Si vous le voulez je vous passe le projet github que j'ai utilisé pour que sa soit plus clair (ce lien ) https://github.com/Gottox/socket.io-java-client

  12. #12
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Regarde cet exemple.
    Tu vois qu'il passe même un array.

    https://www.mkyong.com/java/json-sim...nd-write-json/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JSONObject jsonObject = (JSONObject) obj;
    System.out.println(jsonObject);
     
    String name = (String) jsonObject.get("name");
    System.out.println(name);
    Il fait un get au lieu d'un getString.

Discussions similaires

  1. Problème d'affichage d'un textview qui se trouve dans un fragment
    Par FunckyWarrior dans le forum Composants graphiques
    Réponses: 10
    Dernier message: 28/02/2013, 15h35
  2. Affichage dans TextView avec SQLITE
    Par JCMANSION dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 21/12/2010, 10h56
  3. Erreurs affichage d'un fichier dans un textview
    Par Selennad dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 06/06/2008, 16h33
  4. Réponses: 1
    Dernier message: 05/02/2008, 12h21
  5. affichage dans le front buffers ne marche pas!
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/08/2003, 19h14

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