2013-07-04 86 views
0

我已閱讀了很多關於此主題的內容,但似乎找不到可幫助我的一些答案。 我已經將我的應用程序建模爲前端後端。後端只是一個等待傳入連接的服務器。問題是我一開始應用程序就啓動服務器,我不再與它通信。 現在我需要服務器與前端進行通信,告訴它有人連接。我嘗試了使用靜態方法,但是由於無法從另一個thead更新de UI而出現錯誤。 我該怎麼辦? 編輯:處理來自不同線程的UI更新

我的服務器類

public class Server { 
public static int uniqueID; 
private final int port; 
private final Boolean keepWorking; 
private final String username; 

public Server(int port, String username) { 
    this.port = port; 
    this.username = username; 
    keepWorking = true; 

} 
public void Start() { 
    try { 
     ServerSocket serverSocket = new ServerSocket(port); 
     while (keepWorking) { 

      Socket socket = serverSocket.accept(); 


      MainActivity.SomeoneConnected(); 
     } 
     serverSocket.close(); 

    } catch (IOException e) { 
     Log.d("Error", e.getMessage().toString()); 

    } 

} 

} 

這就是我需要的一切。該服務器可以告訴前端有人連接

+0

請修改您的問題以準確解釋您正在使用的Android結構。例如,這是「只是服務器」某種「服務」?它在等待什麼樣的「連接」? – CommonsWare

回答

1

你應該看看AsyncTasks:

http://developer.android.com/reference/android/os/AsyncTask.html

或任何類型的線程/處理器implementaion的。 - 這裏有很多這方面的例子

也考慮活動的ruOnUiThread()方法。

所有這些解決方案都假設您的客戶端/服務器架構包含在同一活動中。

**根據您的編輯:

您應該使用您的活動的一個實例調用MainActivity.SomeoneConnected();instance.runOnUiThread()或創建UI線程的處理程序,並張貼使用handlerInstance.post(yourRunnable)run()方法中調用MainActivity.SomeoneConnected();一個可運行

這裏是如何創建一個Runnable一個例子:

How to run a Runnable thread in Android?

+0

如何在後端獲取我的活動實例? –

+0

對不起,我現在有點困惑。我假設你所謂的「fronend-backend」實際上都在同一個應用程序中。是這樣嗎?或者您是否發佈了不在您的應用中的代碼?具體來說,服務器類是你的應用程序的一部分? – Scott

+0

是的,他們都在同一個應用程序。只是服務器在不同的線程上運行。 對不起,我沒有說清楚。這只是我打電話前端和後端我的應用程序的不同包,但他們都在同一個應用程序。 –