gpt4 book ai didi

java - 如何在新线程中创建Socket

转载 作者:行者123 更新时间:2023-12-02 04:20:28 25 4
gpt4 key购买 nike

我想创建套接字连接,但我有一些问题。我必须在新线程中创建它,但我不能。

public class SocketManager {
private static SocketManager instance;


private BufferedReader in;
private PrintWriter out;
private Socket mSocket = null;

public static SocketManager me() {
if (instance == null) {
instance = new SocketManager();
}
return instance;
}

public void connection() {
new AsyncTask<Void, Void, Void>() {

@Override
protected Void doInBackground(Void... params) {
try {
mSocket = new Socket(Constants.CHAT_SERVER_URL, 4444);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}.execute();
}

public boolean isConnected() {
return mSocket.isConnected();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
status = (TextView) findViewById(R.id.status);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
SocketManager.me().connection();
if (SocketManager.me().isConnected()) {
status.setText("Connected");
} else {
status.setText("Disconnected");
}

我有错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.net.Socket.isConnected()' on a null object reference

因为mSocket在新线程中创建,当我调用它时它== null;如何在新线程中创建mSocket并使用它?

最佳答案

最好的方法是使用接口(interface)。

在 Socketmanager 类中创建一个接口(interface)

public class SocketManager {
private static SocketManager instance;
private SocketListner listner;

public interface SocketListner {
void onConnectionSuccess();
void onConnectionFailed();
}

public void connection(SocketListner listner) {
this.listner = listner;
new ConnectionTask().execute();
}

并从doInBackGround()方法返回一个 boolean 值来检查连接是否成功

    class ConnectionTask new AsyncTask<Void, Void, Boolean>() {
@Override
protected Void doInBackground(Void... params) {
//...your code

}
@Override
protected void onPostExecute(Boolean result) {
if(result) {
listner.onConnectionSuccess();
} else {
listner.onConnectionFailed();
}
}
}

并在您的 Activity 中实现接口(interface)

 public class YourActivity imlpements SocketListner {
@Override
protected void onCreate(Bundle savedInstanceState) {
//your code
..
}
@Override
void onConnectionSuccess() {
//your socket is connected
status.setText("Connected");
}

@Override
void onConnectionFailed() {
status.setText("Disconnected");
}
}

关于java - 如何在新线程中创建Socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32835829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com