2010-07-26 11 views
0

J'essaie d'appeler une méthode depuis l'intérieur d'un Runnable en cours d'exécution. Il attend qu'une chaîne soit entrée et quand elle dépend de la chaîne (les chaînes agissent comme des commandes), elle appelle une méthode et est censée faire fonctionner ce qui est à l'intérieur.Exécution de la méthode depuis l'extension Activité étendue Exécutable Exécutable

public class App extends Activity implements Runnable { 

    public void run() { 

     try { 
      ServerSocket serverSocket = new ServerSocket(portNum); 
      while (true) {   
       Socket client = serverSocket.accept(); 

       try { 

         BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
         String str = in.readLine(); 
         if(str.equals("test")) { 
          //method call here 
         } 

       } catch(Exception e) { 
         Log.d("App", e.getMessage()); 

       } finally { 
          client.close(); 
         Log.d("App", "Done."); 
        } 
      }  
     } catch (Exception e) { 
      Log.d("App", e.getMessage()); 
     } 
    } 

Répondre

1

Vous devez créer un objet Handler. Chaque instance Handler est associée à un thread, et selon le thread sur lequel vous souhaitez associer/traiter les messages, vous devez créer le Handler dans son contexte. Ensuite, vous pouvez pousser les messages sur la file d'attente Message du thread en créant le Handler. Comme la chaîne vient vous pouvez utiliser quelque chose comme ceci:

public Handler handler_use = new Handler(){ 

    // @Override 
    public void handleMessage(Message msg) { 
     //Do something with the message 
    } 
} 

Et à l'intérieur du bloc try:

try { 
    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
    String str = in.readLine(); 
    if(str.equals("test")) { 
     //Construct the message Msg - based on the string 
     handler_use.sendMessage(Msg); 
    } 
}