2

Je travaille sur une application android de chat en temps réel où je dois connecter socket.io pour une réponse en temps réel . J'ai suivi ce tutoriel: https://socket.io/blog/native-socket-io-and-android/ et j'ai implémenté avec succès socket.io dans mon application Android et obtenir la réponse dans un toast.Obtenir la réponse socket.io dans le client Android, mais ne peut pas comprendre comment implémenter la réponse dans l'adaptateur de recycleur

Voici la classe de connexion Socket:

import android.app.Application; 
    import java.net.URISyntaxException; 
    import io.socket.client.IO; 
    import io.socket.client.Socket; 

    public class ChatApplication extends Application { 

    private Socket mSocket; 
     { 
     try { 
      mSocket = IO.socket(Constants.CHAT_SERVER_URL); 
      } catch (URISyntaxException e) { 
       throw new RuntimeException(e); 
      } 
     } 

    public Socket getSocket() { 
      return mSocket; 
      } 
    } 

Voici l'URL du serveur:

public class Constants { 
     public static final String CHAT_SERVER_URL = 
     "https://pubsub.XXX.com:3000"; 
    } 

Je suis connecté le socket.io dans cette activité et d'obtenir parfaitement la réponse.

Dans cette activité, j'ai joint l'adaptateur recycleur pour afficher la conversation complète en tête-à-tête avec un ami. Pour voir la conversation complète, j'ai utilisé le retrofit.

Voici le code d'activité lien https://pastebin.com/b22ehMFE

Dans cette activité, je l'ai branché la prise par l'événement « nom d'utilisateur » et appeler la fonction « onNewMessage ».

 // initialize Socket 
     ChatApplication app = (ChatApplication) getApplication(); 
     mSocket = app.getSocket(); 
     mSocket.on(Socket.EVENT_CONNECT, onConnect); 
     mSocket.on(username, onNewMessage); 
     mSocket.connect(); 

Je reçois la réponse du serveur en temps réel en public Emitter.Listener onNewMessage

public Emitter.Listener onNewMessage = new Emitter.Listener(){ 

     @Override 
     public void call(final Object... args) { 
      MsgChatActivity.this.runOnUiThread(new Runnable(){ 

       @Override 
       public void run() { 
        //args[i] is the data received 
        JSONObject abc = (JSONObject) args[0]; 

        Toast.makeText(MsgChatActivity.this, ""+ abc, 
          Toast.LENGTH_LONG).show(); 
       } 
      }); 

     } 
    }; 

Maintenant, je dois montrer la réponse dans la vue de l'adaptateur, mais je ne peux pas comprendre comment faire il.

Voici les réponses du serveur au format JSON que je veux mettre en œuvre,

pnType: chat

{ 
    "alertId": "xxxxxxxxxxxxxx", 
    "originator": { 
    "id": "1", 
    "username": "jon", 
    "url": "\/jon", 
    "full_name": "jon smith", 
    "avatar": "\/uploads\/images\/1491902152.jpg", 
    "cover": "\/uploads\/images\/1491902130.jpg", 
    "is_active": "1", 
    }, 
    "queId": "1503725762883", 
    "content_id": "4066", 
    "msg": "", 
    "media": { 
    "sticker": "\/defaultMedia\/stickers\/BlueCat\/3.png" 
    }, 
    "pnType": "chat", 
    "unRead": "1" 
} 

et pnType: chat tapant

  { 
      "pnType": "chatTyping", 
      "originator": { 
      "id": "1", 
      "name": "jon" 
      } 
      } 

Quelqu'un peut me aider à mettre en œuvre la réponse dans l'adaptateur? Merci d'avance.

Répondre

1

Vous l'avez. Utilisez la classe Model comme JSONOBject par réflexion. Ajoutez ce code dans la réponse Emitter.Lister

 Gson gson= new Gson(); 
     socketData=gson.fromJson(abc.toString(),SocketData.class);