xiaoxiaoaishang 2013-01-24 03:39 采纳率: 100%
浏览 2929
已采纳

如何把几个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;
        }
    }
}
  • 写回答

1条回答

  • Sueyexin 2013-01-24 05:22
    关注

    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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器