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 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的