Java Android套接字连接测试
我正在尝试测试我的Android应用程序是否连接到Rpi热点。我正在跟踪客户机代码 我想根据socket.isConnected()的状态在我按下按钮时弹出一条toast消息。然而,我认为每次我尝试并实现它时,我都会遇到网络上的主线程问题。如何在onClick中使用isConnected方法更改以下代码以添加一个简单的“if(true),send toast message” 谢谢你的帮助Java Android套接字连接测试,java,android,sockets,Java,Android,Sockets,我正在尝试测试我的Android应用程序是否连接到Rpi热点。我正在跟踪客户机代码 我想根据socket.isConnected()的状态在我按下按钮时弹出一条toast消息。然而,我认为每次我尝试并实现它时,我都会遇到网络上的主线程问题。如何在onClick中使用isConnected方法更改以下代码以添加一个简单的“if(true),send toast message” 谢谢你的帮助 package mrxhaleenterprise.sockettest; import java.io
package mrxhaleenterprise.sockettest;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private Socket socket;
private static final int SERVERPORT = 39169;
private static final String SERVER_IP = "172.24.1.1";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new ClientThread()).start();
}
public void onClick(View view) {
try {
EditText et = (EditText) findViewById(R.id.EditText01);
String str = et.getText().toString();
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);
out.println(str);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
class ClientThread implements Runnable {
@Override
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
socket = new Socket(serverAddr, SERVERPORT);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
onClick
在主线程上被调用。所以您正在主线程上写入套接字(网络操作),这导致了问题。下面的代码应该在后台线程上运行
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);
out.println(str);
我想根据socket.isConnected()的状态在我按下按钮时弹出一条toast消息
不,你没有。一旦构建了
套接字
,它就被连接了,如果连接中断,该方法不会神奇地返回false。您需要维护自己的连接状态,这取决于您是遇到了IOException
还是流结束。更可能的是,您根本不需要该按钮,而是希望在断开连接时弹出一个错误对话框。您可以共享错误日志吗?