2010-07-26 2 views
0

Я пытаюсь вызвать метод из Runnable, который запущен. Он ожидает ввода строки и, когда она тогда зависит от строки (строки действуют как команды), она вызывает метод и должна запускать что-то внутри него.Выполнить метод из extends Activity extends Runnable

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()); 
     } 
    } 

ответ

1

Вы должны создать объект Handler. Каждый экземпляр Handler связан с потоком, и в зависимости от того, какой поток вы хотите связать/обрабатывать сообщения, вы должны создать Handler в его контексте. Затем вы можете направить сообщения в очередь Message потока, создав Handler. Как строка приходит вы можете использовать что-то вроде этого:

public Handler handler_use = new Handler(){ 

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

И внутри Ьгу блока:

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); 
    } 
} 
Смежные вопросы