gpt4 book ai didi

java - 如何使用Asynctask建立socket连接?

转载 作者:行者123 更新时间:2023-12-01 11:46:19 25 4
gpt4 key购买 nike

最近研究利用Asynctask建立socket连接,但是遇到了一些情况现在我可以使用按按钮建立连接,但我不知道如何使按钮文本从“未连接”变为“已连接”。编译没问题但在模拟器上无法执行,请按按钮,我可以看到从“未连接”到“已连接”的文字,但下一秒强行关闭了APP。

以下是我的代码 fragment :

public class MainActivity extends Activity {
public static Button Btn_Wifi,Btn_Power,Btn_Flame;
public static Boolean connected=false;
public static DataOutputStream dataOutputStream = null;
public static DataInputStream dataInputStream = null ;
public static Socket socket;

异步任务:

static class SocketTask extends AsyncTask<Void, Void, Void > {
@Override
protected Void doInBackground(Void ... parms) {
try {
socket = new Socket("ip", port);//
dataOutputStream = new DataOutputStream(socket.getOutputStream());//and stream
changeConnectionStatus(true);//change the connection status
}catch (UnknownHostException e) {
}catch (IOException e) {
}finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
};

Button.OnClickListener:

Button.OnClickListener BtnWifiOnClickListener = new Button.OnClickListener(){
@Override
public void onClick(View view) {
//SocketTask sockettask = new SocketTask();
new SocketTask().execute();
}
};

更改连接状态:

public static void changeConnectionStatus(Boolean isConnected) {
connected=isConnected;//change variable
if(isConnected){//if connection established
Btn_Wifi.setText("connected");
Btn_Power.setEnabled(true);

}else{
Btn_Wifi.setText("unconnected");
Btn_Power.setText("POWER OFF");
Btn_Power.setEnabled(false);
PowerStatus(false);
}
}

正解

@Override
protected void onPostExecute(Void result) {
changeConnectionStatus(true);
}

最佳答案

你无法通过doInBackground()触摸UI

您需要使用onPostExecute()

changeConnectionStatus(true) 的调用从 doInBackground() 中移出,如下所示:

@Override
protected void onPostExecute() {
changeConnectionStatus(true);
}

关于java - 如何使用Asynctask建立socket连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29103770/

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