Je suis nouveau à la programmation dans Android et j'ai besoin d'aide pour créer une application. Je veux que deux téléphones se connectent l'un à l'autre, l'un étant le client et l'autre étant le serveur. Je veux que le client ait 2 étapes. Dans le premier cas, l'utilisateur saisit l'adresse IP du serveur et clique sur un bouton pour établir la connexion. Dans la seconde, l'utilisateur saisit un message et clique sur un bouton pour l'envoyer au serveur.comment travailler avec des prises, des activités et des vues?
Le code ci-dessous est d'envoyer la chaîne "message" au serveur mais comme je le disais je veux que l'utilisateur puisse entrer la chaîne. Je ne sais pas comment aborder son problème, ai-je besoin d'une deuxième activité à appeler une fois que la connexion est établie dans l'activité que je montre ci-dessous? Dans ce cas je ne saurais pas comment passer une socket à une autre activité, je sais seulement comment passer des cordes. En outre, j'aurais besoin d'un autre bouton et donc d'un nouveau OnClickListener et je devrais encore passer le socket à cette fonction. Sans utiliser une seconde activité, je ne sais pas comment faire apparaître le deuxième champ d'entrée (celui où l'utilisateur entrerait le message à envoyer au serveur) une fois la connexion établie. Les vues (layout.xml) pour cette activité sont déjà associées à la même chose, je ne peux pas simplement effacer l'écran et créer un nouveau champ EditText à la volée.
J'espère que je me suis fait clair.
Merci à l'avance
@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;
}
}
}
}
J'ai toujours le problème du bouton. J'ai besoin d'instancier un nouvel objet OnClickListener où je ferais la tâche d'envoyer le message mais je ne peux pas lui passer le socket. – cracq
pourquoi pas ... vous pouvez avoir un OnClickListener pour les deux boutons et dans le cas de commutateur, vous pouvez vérifier le R.id. Vous pouvez utiliser socket dans cela. – Jambaaz