2017-02-18 1 views
0

J'ai un projet où l'application Android se connecte au serveur TCP et reçoit des données de celui-ci. Le serveur fonctionne en boucle:
1. Attendez la connexion.
2. Acceptez le client.
3. Envoyer les données au client.
4. Fermez la connexion.
5. Retour à 1.
Actualiser l'activité pour se connecter au serveur

Mon application se connecte au serveur de méthode onCreate() et cela fonctionne, il reçoit des données, mais je veux que cela fonctionne dans une boucle de sorte qu'il peut effectuer à nouveau la connexion.

Voici un code d'application.
méthode onCreate:

protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     temperatureValue = (TextView) findViewById(R.id.temperatureValue); 
     humidityValue = (TextView) findViewById(R.id.humidityValue); 
     lightValue = (TextView) findViewById(R.id.lightValue); 


     new Thread(new ClientThread()).start(); 
    } 

ClientThread:

class ClientThread implements Runnable 
{ 
    String data; 

    @Override 
    public void run() 
    { 
     try 
     { 
      InetAddress serverAddr = InetAddress.getByName(SERVER_IP); 
      socket = new Socket(serverAddr, SERVER_PORT); 
     } 
     catch (UnknownHostException e1) 
     { 
      e1.printStackTrace(); 
     } 
     catch (IOException e2) 
     { 
      e2.printStackTrace(); 
     } 
     try 
     { 
      InputStream in = socket.getInputStream(); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      data = br.readLine(); 

      splitData(data); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 

méthode splitData:

public void splitData(String data) 
    { 
     String[] parts = data.split(";"); 
     String temperatura, wilgotnosc, swiatlo; 

     temperatura = parts[0]; 
     wilgotnosc = parts[1]; 
     swiatlo = parts[2]; 

     temperatureValue.setText(temperatura.substring(0, 5)); 
     humidityValue.setText(wilgotnosc.substring(0, 5)); 
     lightValue.setText(swiatlo); 
    } 

Chaîne reçue du serveur ressemble à ceci:
"la température, l'humidité, la lumière"

J'ai essayé de rafraîchir mon activité comme les gens disent dans ce sujet: here et mon application ne démarre même pas et je reçois cet avertissement:
W/art: Suspendu tous les threads ont pris: 10.644ms.

Et ma question est la suivante:
Est-il possible que je peux rafraîchir ma demande et il se connecter à nouveau au serveur et actualiser les valeurs sur l'écran? Cela fonctionne si je ferme l'application et le rouvre à nouveau. J'apprécie toute aide.

Répondre

0

splitData (données);

Code Pseudo:

Ci-dessous votre code ici, vous pouvez mettre en œuvre une méthode faire refreshConnection

public void refreshConnection() { 
    Put your time limit when to refresh and go run the run() method again. 
}