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

Messages postés
173
Date d'inscription
lundi 2 mai 2011
Dernière intervention
13 décembre 2012
- - Dernière réponse : tonyledragon
Messages postés
173
Date d'inscription
lundi 2 mai 2011
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.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Dernière intervention
13 décembre 2012
3
Merci
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();

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de tonyledragon
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Dernière intervention
13 décembre 2012
0
Merci
Svp j'ai besoin d'aide...
Commenter la réponse de tonyledragon
Messages postés
14339
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
18 janvier 2019
5789
0
Merci
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...
Commenter la réponse de BunoCS
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Dernière intervention
13 décembre 2012
0
Merci
J'utilise un serveur via TCP/ip pas via le net avec http etc
Commenter la réponse de tonyledragon
Messages postés
5316
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
18 janvier 2019
99
0
Merci
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
Commenter la réponse de Twinuts
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Dernière intervention
13 décembre 2012
0
Merci
à l'arrache dans le code ? a l'envoie d'un message exactement.
Commenter la réponse de tonyledragon
Messages postés
5316
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
18 janvier 2019
99
0
Merci
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
Commenter la réponse de Twinuts
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Dernière intervention
13 décembre 2012
0
Merci
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
Commenter la réponse de tonyledragon
Messages postés
5316
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
18 janvier 2019
99
0
Merci
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
Commenter la réponse de Twinuts
Messages postés
5316
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
18 janvier 2019
99
0
Merci
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
Commenter la réponse de Twinuts
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Dernière intervention
13 décembre 2012
0
Merci
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();
}
    }
};
Commenter la réponse de tonyledragon
Messages postés
5316
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
18 janvier 2019
99
0
Merci
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
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.