私はAndroidでのプログラミングに不慣れであり、アプリケーションを構築するための支援が必要です。2台の電話を相互に接続します。1つはクライアントで、もう1つはサーバーです。クライアントに2つのステージを持たせたいです。最初に、ユーザーはサーバーのIPを入力し、ボタンをクリックして接続を確立します。2つ目では、ユーザーはメッセージを入力し、ボタンをクリックしてサーバーに送信します。
以下に示すコードは、文字列「メッセージ」をサーバーに送信することですが、私が言ったように、ユーザーが文字列を入力できるようにしたいのです。彼の問題に取り組む方法がわかりません。以下に示すアクティビティで接続が確立されたら、2番目のアクティビティを呼び出す必要がありますか?その場合、ソケットを別のアクティビティに渡す方法がわからず、文字列を渡す方法しかわかりません。さらに、別のボタンが必要になるため、新しいOnClickListenerが必要になりますが、それでもその関数にソケットを渡す必要があります。
2番目のアクティビティを使用しないと、接続が確立されたときに2番目の入力フィールド(ユーザーがサーバーに送信するメッセージを入力するフィールド)を表示する方法がわかりません。このアクティビティのビュー(layout.xml)はすでに同じものに関連付けられているため、画面をクリアして新しいEditTextフィールドをその場で作成することはできません。
私は自分自身を明確にしたいと思います。
前もって感謝します
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
serverIp = (EditText) findViewById(R.id.server_ip);
connectPhones = (Button) findViewById(R.id.connect_phones);
connectPhones.setOnClickListener(connectListener);
}
private OnClickListener connectListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (!connected) {
serverIpAddress = serverIp.getText().toString();
if (!serverIpAddress.equals("")) {
Thread cThread = new Thread(new ClientThread());
cThread.start();
}
}
}
};
public class ClientThread implements Runnable {
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Socket socket = new Socket(serverAddr, ServerActivity.SERVERPORT);
connected = true;
while (connected) {
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
**out.println("messageToSend");**
} catch (Exception e) {
Log.e("ClientActivity", "S: Error", e);
}
}
socket.close();
} catch (Exception e) {
Log.e("ClientActivity", "C: Error", e);
connected = false;
}
}
}
}