Ciao ragazzi
Allora sarò molto breve: sto cercando di creare una connessione socket con un server (Il server è un'applicazione che gira sul PC e I client sono delle App per android). Ho creato questo tipo di codice per il mio client:
CLIENT
1
2public class Messaggi extends ActionBarActivity implements OnClickListener {
3
4LinearLayout mLayout;
5ScrollView scroll;
6EditText writeMessage;
7Button send;
8Socket connection;
9
1011protected void onCreate(Bundle savedInstanceState) {
12super.onCreate(savedInstanceState);
13setContentView(R.layout.fragment_messaggi);
14mLayout = (LinearLayout) findViewById(R.id.linearVertical);
15scroll = (ScrollView) findViewById(R.id.scrollView1);
16writeMessage= (EditText)findViewById(R.id.ScriviMessaggio);
17send= (Button)findViewById(R.id.invia);
18send.setOnClickListener(this);
19LavoraDietro asd = new LavoraDietro();
20asd.execute();
21}
2223public void onClick(View v) {
24}
25
26private void updateScroll(){
27scroll.post(new Runnable() {
28
29public void run() {
30scroll.fullScroll(View.FOCUS_DOWN);
31}
32});
33}
34
35private TextView createNewTextView(String text) {
36final LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
37final TextView textView = new TextView(this);
38textView.setLayoutParams(lparams);
39textView.setText("Client: " + text);
40return textView;
41}
42
43private class LavoraDietro extends AsyncTask<Void, Void, Boolean> {
44String mex;
45
46protected Boolean doInBackground(Void... params){
47try {
48InetAddress local = InetAddress.getByName("192.168.1.79");
49Socket connection= new Socket(local , 7100);
50DataOutputStream output = new DataOutputStream(connessione.getOutputStream());
51output.writeUTF("Client: Server prova");
52output.flush();
53DataInputStream input = new DataInputStream(connessione.getInputStream());
54mex= input.readUTF();
55} catch (UnknownHostException e) {
56// TODO Auto-generated catch block
57e.printStackTrace();
58} catch (IOException e) {
59// TODO Auto-generated catch block
60e.printStackTrace();
61return false;
62}catch(Exception e){
63e.printStackTrace();
64}
65return true;
66}
67
68
69protected void onPostExecute(Boolean result) {
70super.onPostExecute(result);
71if(result == true){
72mLayout.addView(createNewTextView("Sono connesso al server"));
73mLayout.addView(createNewTextView("I canali sono aperi.."));
74mLayout.addView(createNewTextView(mex));
75updateScroll();
76}
77else{
78mLayout.addView(createNewTextView("ERRORE CONNESSIONE AL SERVER "));
79updateScroll();
80}
81}
82}
83}
84
In questo modo quando l applicazione viene aperta si connette al server automaticamente e invia un messaggio di prova. Questo viene letto dal server e subito dopo riinviato al client. Quando il client riceve il messaggio lo mostra nel TextField.
Il mio problema è il seguente: Voglio fare in modo che quando l applicazione viene aperta automaticamente il client si connette al server ed è pronto ad ascoltare tutto ciò che il server invia (proprio come succede nel codice qui sopra), ma solo quando clicco sul tasto "send" un messaggio (tipo "ciao belli") deve essere inviato al server. In poche parole vorrei dividere l'azione di connettermi al server e ascoltare i suoi messaggi da quella di inviare i messaggi al server..
La mia idea era quella di creare un AsyncTask[1] che apriva la socket e i canali di input, e poi aprire un altro AsyncTask[2] che creava un output quando il tasto era cliccato e invia un messaggio. Ma non so proprio da dove iniziare perchè dovrei fare in modo che la connessione che viene stabilita nel primo Asynctask (Asynctask[1]) rimanga attiva
Qualcuno può darmi un idea di come fare. Se non sono stato chiaro scrivete pure cercherò di essere più esaustivo possibile.
Grazie mille ragazzi