2016-04-25 9 views
0

Ich mache eine Android App, die alle X Minuten überprüft, ob ein TCP/IP Server Socket auf meinem Computer geöffnet wurde. Wenn SO, es eine Verbindung und liest die Daten von ihm, wenn nicht, es wartet und versucht, wieder in X min verbinden ...Android Studio: Überprüfen, ob der Server-Socket eingeschaltet ist/alle X Minuten gehört

Der folgende Code funktioniert einmal beim Einschalten des Servers zuerst und dann der Client (manuell), aber ich kann den Client nicht dazu bringen, weiter zu überprüfen, ob die Server-Socket eingeschaltet ist/basierend auf der Zeit zuhört.Der asynchrone Ansatz funktioniert nicht, weil ich keine Verzögerung einfügen kann und ich kann den Handler-Ansatz nicht zum Laufen bringen.

CheckserversocketeveryXmin.java

public class AppListener extends Async { 

@Override 
public void handleMessage(Message msg) { 

    final Handler h = new Handler(); 
    final int delay = 5000; //milliseconds 

    h.postDelayed(new Runnable() { 
     public void run() { 


      try { 

       String msg_received = null; 

       System.out.println("LISTENING FOR LAST INSTALLED APP"); 


       System.out.println("TRY"); 

       Socket socket = new Socket("85.190.178.23", 5050); 

       // Get data sent through socket 
       DataInputStream DIS = new DataInputStream(socket.getInputStream()); 

       System.out.println("DataInputStream Started"); 

       // read data that got sent 
       msg_received = DIS.readUTF(); 

       System.out.println("Message from server" + msg_received); 

       // Might not want to close socket, or only the first string will be sent and none after 
       socket.close(); 


      } catch (Exception e) { 
       System.out.println("Did not receive string"); 
      } 


      h.postDelayed(this, delay); 
     } 
    }, delay); 

} 

} 

Jetzt kann ich das falsch sein takling, diesen Code in meine Hauptaktivität setzen, aus irgendeinem Grunde alle x Sekunden Trys, aber tut nie die Verbindung, wo, wie es hier macht die Verbindung einmal wenn ich die Verzögerung entferne.

Würde eine Endlosschleife in einem Async (ich weiß, das ist nicht technisch gut) und eine Wartezeit/Verzögerung in es ein guter Ansatz sein? Wenn dies der Fall ist, haben Sie Sie einen Zeiger haben :)

Antwort

0

Setzen Sie diesen Code in meine Hauptaktivität aus irgendeinem Grund alle x Sekunden versucht, aber hat nie die Verbindung

Sie wahrscheinlich 11 SDK +, so dass Ihr Handler ein NetworkOnMainThreadException wirft, die Sie in Ihren Fang Block

wo wie hier es schlucken einmal funktioniert die Verbindung, wenn ich die Verzögerung

entfernen

Sie deklarieren Ihre Handler Variable in handleMessage, so dass Sie nach der Veröffentlichung Ihres Runnable zum Handle sofort alle Verweise darauf löschen; es wird wahrscheinlich Müll gesammelt. Machen Sie Ihre zwei Variablen Mitglied Variablen in Ihrer AppListener Klasse

+0

danke! Es half :) – Emil