如何把几个onclick监听器放到sockets programming方法中?

在我的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);