2013-07-04 51 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

是的,他们都在同一个应用程序。只是服务器在不同的线程上运行。 对不起,我没有说清楚。这只是我打电话前端和后端我的应用程序的不同包,但他们都在同一个应用程序。 –