Java Android套接字连接测试

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

我正在尝试测试我的Android应用程序是否连接到Rpi热点。我正在跟踪客户机代码

我想根据socket.isConnected()的状态在我按下按钮时弹出一条toast消息。然而,我认为每次我尝试并实现它时,我都会遇到网络上的主线程问题。如何在onClick中使用isConnected方法更改以下代码以添加一个简单的“if(true),send toast message”

谢谢你的帮助

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
还是流结束。更可能的是,您根本不需要该按钮,而是希望在断开连接时弹出一个错误对话框。

您可以共享错误日志吗?