在我的android程序中有一个sockets program,我想要在客户端通过点击按钮来发送一个command或者是文本消息。然后,发不同的文本消息要依靠于是哪个按钮被点击的。但是我从PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket .getOutputStream())), true);
得到了一个编译错误的消息,是关于"out"PrintWriter对象。
如果我在一个onclick监听器内部用"out",我应该怎么改正这个编译错误?我真的不想让这个通过改正编译错误成为一个final variable而作为recommended。
下边这个代码就是在run()方法中有两个onclick按钮监听器来通过socket从客户端向android app服务端发送消息
如果你点击sendA按钮他就发送文本消息"testA",如果你点击sendB按钮他就发送文本消息"testB"
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Log.d("ClientActivity", "C: Connecting...");
Socket socket = new Socket(serverAddr, 8080);
connected = true;
while (connected) {
try {
Log.d("ClientActivity", "C: Sending command.");
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
sendA.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
out.println("testA");
}
});
sendB.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
out.println("testB");
}
});
// where you issue the commands
// out.println("testX");
Log.d("ClientActivity", "C: Sent.");
} catch (Exception e) {
Log.e("ClientActivity", "S: Error", e);
}
}
socket.close();
Log.d("ClientActivity", "C: Closed.");
} catch (Exception e) {
Log.e("ClientActivity", "C: Error", e);
connected = false;
}
}
}
Putting final will clear your error.
这个应该能解决你的错误。
final PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
但是就像你说的,你不想要final,那你为什么不声明成全局变量?
// global variable
PrintWriter out;
.......
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);