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

tonyledragon 173 Messages postés lundi 2 mai 2011Date d'inscription 13 décembre 2012 Dernière intervention - 13 oct. 2012 à 11:13 - Dernière réponse : tonyledragon 173 Messages postés lundi 2 mai 2011Date d'inscription 13 décembre 2012 Dernière intervention
- 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
tonyledragon 173 Messages postés lundi 2 mai 2011Date d'inscription 13 décembre 2012 Dernière intervention - 18 oct. 2012 à 10:49
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();

Merci tonyledragon 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de tonyledragon
tonyledragon 173 Messages postés lundi 2 mai 2011Date d'inscription 13 décembre 2012 Dernière intervention - 14 oct. 2012 à 11:13
0
Merci
Svp j'ai besoin d'aide...
Commenter la réponse de tonyledragon
BunoCS 14210 Messages postés lundi 11 juillet 2005Date d'inscription 12 novembre 2018 Dernière intervention - 15 oct. 2012 à 09:33
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
tonyledragon 173 Messages postés lundi 2 mai 2011Date d'inscription 13 décembre 2012 Dernière intervention - 15 oct. 2012 à 11:55
0
Merci
J'utilise un serveur via TCP/ip pas via le net avec http etc
Commenter la réponse de tonyledragon
Twinuts 5292 Messages postés dimanche 4 mai 2003Date d'inscription 12 novembre 2018 Dernière intervention - 16 oct. 2012 à 20:37
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
tonyledragon 173 Messages postés lundi 2 mai 2011Date d'inscription 13 décembre 2012 Dernière intervention - 17 oct. 2012 à 10:43
0
Merci
à l'arrache dans le code ? a l'envoie d'un message exactement.
Commenter la réponse de tonyledragon
Twinuts 5292 Messages postés dimanche 4 mai 2003Date d'inscription 12 novembre 2018 Dernière intervention - 17 oct. 2012 à 10:47
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
tonyledragon 173 Messages postés lundi 2 mai 2011Date d'inscription 13 décembre 2012 Dernière intervention - 17 oct. 2012 à 14:13
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
Twinuts 5292 Messages postés dimanche 4 mai 2003Date d'inscription 12 novembre 2018 Dernière intervention - 17 oct. 2012 à 14:23
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
Twinuts 5292 Messages postés dimanche 4 mai 2003Date d'inscription 12 novembre 2018 Dernière intervention - 17 oct. 2012 à 14:24
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
tonyledragon 173 Messages postés lundi 2 mai 2011Date d'inscription 13 décembre 2012 Dernière intervention - 17 oct. 2012 à 19:40
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
Twinuts 5292 Messages postés dimanche 4 mai 2003Date d'inscription 12 novembre 2018 Dernière intervention - 17 oct. 2012 à 19:53
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.