0

私はAndroidにソケットプログラムを持っています。クライアント側のボタンをクリックしてコマンドまたはテキストメッセージを送信したいと思います。押されたボタンに応じて異なるテキストメッセージを送信します。しかし、PrintWriterから「out」PrintWriterオブジェクトに関するコンパイラエラーメッセージが表示されますout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket .getOutputStream()))、true);

onclickリスナー内でこの「out」を使用する場合、このコンパイラエラーを修正するにはどうすればよいですか?修正としてコンパイラーが推奨するように、これを最終的な変数にしたくありません。

これは、クライアントからサーバーのAndroidアプリにソケットでマッサージを送信するためのrun()メソッド内の2つのonclickボタンリスナーを含む以下に示すコードです。

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;
        }
    }
}
4

1 に答える 1

0

finalを置くと、エラーがクリアされます。

final PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                            .getOutputStream())), true);

しかし、あなたが望んでいないと言ったようにfinal、それならoutグローバル変数として宣言してみませんか?

// global variable
PrintWriter out;

.......

out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                                .getOutputStream())), true);
于 2013-01-24T02:18:32.820 に答える