Problème Réception Socket [Android-java]

Résolu
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 - 13 oct. 2012 à 11:13
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 - 18 oct. 2012 à 10:49
Bonjour à tous ,
Voila j'ai un enorme probleme avec mon application android et je n'arrive pas a le réglé bon d'avance je vous préviens je suis développeur c# et non java je ne connait que trés trés peu java.Bref voila je veux que mon apli android ce connecte au serveur c# sur mon pc sa c'est ok après qu'il envoie un message au serveur c'est OK aussi mon problème et la réception continue des message envoyer par le serveur j'ai déjà essayer en while(true){
}
comme en c# mais le problème et je trouve pas le moyen de la faire tournée sans fait buger l'appli en quelque sorte l'apli surcharge j'arrive ni a la mettre en arriere plan ou autre ...
Donc si quelqu'un peux m'aider a savoir comment faire pour recevoir en continue les donnée envoyer par socket au client android.
Je vous remercie d'avance.

Voici mon code en cas de besoin :
public void ReceptionMessage(){
while(true){

byte[] buffer = new byte[1024];
        int readBytes;
try {
readBytes = s.getInputStream().read(buffer, 0, 1024);
RcptDonnee = new String(buffer, 0, readBytes, "UTF-8");
} catch (IOException e) {
// TODO Bloc catch erreur
e.printStackTrace();
}

String[] separated = RcptDonnee.split("#");

if (separated[0] == "ConnexionAndroid"){
AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Erreur Serveur");
alertDialog.setMessage(separated[0]);
alertDialog.show();
String[] separated2 = separated[1].split("\\{\\}");
}
else if(separated[0] =="InscriptionAndroid"){

}
else if (separated[0] =="TestConnexionAndroid"){

}

}
}

Voila la réception mais problème et que quand je le lance paff la surcharge normal d'un coté...
Bon merci de bien vouloir m'aider.

12 réponses

tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
18 oct. 2012 à 10:49
C'est bon trouvé !
private Runnable readingRun = new Runnable()
{
    public void run()
            {
try {
    InputStream input;
    input = s.getInputStream();
            int readBytes;
            byte[] buffer = new byte[1024];
            while (((readBytes = input.read(buffer)) != 0))
            {
                if (readBytes!= 0)
                {
                    String receivedStr = new String(buffer, 0, readBytes, "UTF-8");
                    String[] Analyse = receivedStr.split("#");
                    if (Analyse[0].equals("ConnexionAndroid")){
                    	 runOnUiThread(new Runnable() {
                    	        public void run() {
                    	          Toast Annonce =  Toast.makeText( getApplicationContext() , "Reception message serveur connexion" , Toast.LENGTH_SHORT );Annonce.show();
                    	        }
                    	  });
                    }
                }
                else
                    break;
            }
                    
} catch (IOException e) {
    e.printStackTrace();
}
    }
};


et je l'appelle via un thread
readingThread = new Thread(readingRun);
readingThread.start();
1
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
14 oct. 2012 à 11:13
Svp j'ai besoin d'aide...
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
15 oct. 2012 à 09:33
Hello,
Il y a une classe toute prête pour envoyer des requêtes: DefaultHTTPClient


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
15 oct. 2012 à 11:55
J'utilise un serveur via TCP/ip pas via le net avec http etc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
16 oct. 2012 à 20:37
Salut,

ta méthode ReceptionMessage est appelée dans un thread ou à l'arrache dans le code ?


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
17 oct. 2012 à 10:43
à l'arrache dans le code ? a l'envoie d'un message exactement.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
17 oct. 2012 à 10:47
Salut,


à l'arrache dans le code ?

En gros dans le code hors thread (autre que le mainthread) si oui ton problème de blocage vient de là.

-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
17 oct. 2012 à 14:13
Oui j'ai essayer d'appeler via fonction runnable mais sa fonctionne pas après du coté de mon code si je change exemple nom du bouton ou autre il m'affiche une erreur thread10 error
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
17 oct. 2012 à 14:23
Salut,

Pour effectuer le refresh du bouton (enfin d'une view) passe par la méthode poste de la view, exemple (équivalent à invokeLater de SwingUtilities):
/* inside your non-UI thread */
leBouton.post(new Runnable() {
  public void run() {
    // action de refresh and co
  }
});

Note: Il existe d'autres façons de faire, mais perso je l'a trouve plus simple.


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
17 oct. 2012 à 14:24
Re,

Naturellement cela ne te dispense pas de faire le reste du traitement dans un thread, le post c'est uniquement pour les actions de refresh hors du thread main.


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
17 oct. 2012 à 19:40
voici ce que j'ai fait le probleme et que sa a l'air de marche simplement mon problème est que quand j'affiche un toast ou n'importe quoi que je fait maffiche une erreur et me ferme mon api voici le code
private Runnable readingRun = new Runnable()
{
    public void run()
            {
try {
    InputStream input;
    input = s.getInputStream();
            int readBytes;
            byte[] buffer = new byte[1024];
            while (((readBytes = input.read(buffer)) != 0))
            {
                if (readBytes!= 0)
                {
                    String receivedStr = new String(buffer, 0, readBytes, "UTF-8");
                    String[] Analyse = receivedStr.split("#");
                    if (Analyse[0].equals("ConnexionAndroid")){
                    	Toast Annonce =  Toast.makeText( getApplicationContext() , "Reception message serveur connexion" , Toast.LENGTH_SHORT );Annonce.show(); 
                    }
                }
                else
                    break;
            }
                    
} catch (IOException e) {
    e.printStackTrace();
}
    }
};
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
17 oct. 2012 à 19:53
Salut,

Il faut plus de code... Comment est appelé ton runnable? L'init des autres variables etc...

-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous