在另一个活动中使用从主活动实例化的套接字



我在主活动中创建了套接字

public class MainActivity...{
..
public void sendToServer(String msg){
out.println("start");
}
..
socket = new Socket(serverAddr, SERVER_PORT); //Socket Creation
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                            .getOutputStream())), true); //stream to kick  data to server
}

如果我在主活动的按钮单击上调用 sendToServer("hi"(,我可以在服务器端看到 msg。我试图以某种方式从另一个活动中调用它,例如

MainActivity con = new MainActivity();
con.sendToServer("hii");

困惑!我该如何实现它?-_-

我会写这样的东西.创建单一实例类。

public class SocketClient {
    private static SocketClient sClient;
    private SocketClient() {
    }
    public synchronized static SocketClient getInstance() {
        if (sClient == null) {
            sClient = new SocketClient();
        }
        return sClient;
    }
    public void connect() {
        //Your connection code will come here
    }
    public void disconnect() {
        //Your disconnection code will come here
    }
    public void sendMessage(String message) {
        // message sending will code 
    }
}

您可以在应用程序中的任何位置访问它。

@Krish的方法很好,但我认为需要更多的解释:

从面向对象的角度来看:你应该把这个套接字实现移到一个单独的类型,因为活动一定不知道它;制作你自己的接口,并根据它的目的命名它(例如'SaySomethingService'(。这样,您可以更好地测试您的活动(您不需要在单元测试期间创建套接字,这很好(,并且您可以更改您的实现,而无需更改您的活动(这也很好(。

(除此之外:我不喜欢单例模式,有些人甚至认为,这是一种反模式。还有更优雅的解决方案 - 但这取决于要求、尺寸等;最后,这取决于编写和维护应用程序的开发人员。

相关内容

最新更新