Android中的回调和自定义套接字客户端
我使用了本教程中的代码,但出现了以下错误: 无法解析方法“send(java.lang.String)” 无法解析方法“disconnect()” Client.java类中的问题,我根据教程(上面的链接)创建了这个类,但我无法解决这个问题 MainActivity.java Client.javaAndroid中的回调和自定义套接字客户端,android,sockets,Android,Sockets,我使用了本教程中的代码,但出现了以下错误: 无法解析方法“send(java.lang.String)” 无法解析方法“disconnect()” Client.java类中的问题,我根据教程(上面的链接)创建了这个类,但我无法解决这个问题 MainActivity.java Client.java }这是因为您在套接字(来自回调)上调用这些方法,而不是在客户端(位于另一个作用域)上调用这些方法,因为它们具有相同的名称,java将使用最小的变量作用域 更改回调变量的名称或客户端变量的名称,在使用
}这是因为您在
套接字(来自回调)上调用这些方法,而不是在客户端(位于另一个作用域)上调用这些方法,因为它们具有相同的名称,java将使用最小的变量作用域
更改回调变量的名称或客户端变量的名称,在使用正确的回调变量时,它应该会起作用:)
例:
void doIt() {
Client socket = new Client("192.168.0.8", 1234);
socket.setClientCallback(new Client.ClientCallback () {
@Override
public void onMessage(String message) {
}
@Override
public void onConnect(Socket socket) {
socket.send("Hello World!\n");
socket.disconnect();
}
@Override
public void onDisconnect(Socket socket, String message) {
}
@Override
public void onConnectError(Socket socket, String message) {
}
});
socket.connect();
}
public class Client {
private Socket socket;
private OutputStream socketOutput;
private BufferedReader socketInput;
private String ip;
private int port;
private ClientCallback listener=null;
public Client(String ip, int port){
this.ip=ip;
this.port=port;
}
public void connect(){
new Thread(new Runnable() {
@Override
public void run() {
socket = new Socket();
InetSocketAddress socketAddress = new InetSocketAddress(ip, port);
try {
socket.connect(socketAddress);
socketOutput = socket.getOutputStream();
socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
new ReceiveThread().start();
if(listener!=null)
listener.onConnect(socket);
} catch (IOException e) {
if(listener!=null)
listener.onConnectError(socket, e.getMessage());
}
}
}).start();
}
public void disconnect(){
try {
socket.close();
} catch (IOException e) {
if(listener!=null)
listener.onDisconnect(socket, e.getMessage());
}
}
public void send(String message){
try {
socketOutput.write(message.getBytes());
} catch (IOException e) {
if(listener!=null)
listener.onDisconnect(socket, e.getMessage());
}
}
private class ReceiveThread extends Thread implements Runnable{
public void run(){
String message;
try {
while((message = socketInput.readLine()) != null) { // each line must end with a \n to be received
if(listener!=null)
listener.onMessage(message);
}
} catch (IOException e) {
if(listener!=null)
listener.onDisconnect(socket, e.getMessage());
}
}
}
public void setClientCallback(ClientCallback listener){
this.listener=listener;
}
public void removeClientCallback(){
this.listener=null;
}
public interface ClientCallback {
void onMessage(String message);
void onConnect(Socket socket);
void onDisconnect(Socket socket, String message);
void onConnectError(Socket socket, String message);
}
void doIt() {
final Client myClient = new Client("192.168.0.8", 1234);
myClient.setClientCallback(new Client.ClientCallback () {
@Override
public void onMessage(String message) {
}
@Override
public void onConnect(Socket socket) {
myClient.send("Hello World!\n");
myClient.disconnect();
}
@Override
public void onDisconnect(Socket socket, String message) {
}
@Override
public void onConnectError(Socket socket, String message) {
}
});
myClient.connect();
}