Autore Topic: Connessione TCP condivisa da più activity  (Letto 492 volte)

Offline allinone.zucchelli

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
    • Idee Di Legno
  • Dispositivo Android:
    Sony Xperia Z
  • Sistema operativo:
    Win 8
Connessione TCP condivisa da più activity
« il: 13 Luglio 2013, 13:51:56 CEST »
0
Salve a tutti, ho bisogno di creare una connessione TCP di tipo client su il mio device android...Ho seguito questo tutorial http://myandroidsolutions.blogspot.it/2012/07/android-tcp-connection-tutorial.html e funziona tutto egregiamente. Questo esempio però sfrutta solo l'activity principale io vorrei che la gestione della connessione dell'invio e ricezione dei messagi sia estesa a tutti gli activity e per questo ho usato in particolare la funzione Application Contex di cui ho preso spunto qui http://www.anddev.it/index.php?topic=896.0 non ho problemi per la connessione e l'invio dei messaggi infatti ho già creato un altra activity e sono riuscito a inviare i messagi la questione che mi lascia spiazzato è come riceverli questi maledetti messaggi perchè la lettura dei messaggi in coda li fa da quello che ho capito dentro un thread e non so come accedervi vi posto un po di codice:

Codice: [Seleziona]
public class MainActivity extends Activity
{
    private ListView mList;
    private ArrayList<String> arrayList;
    private MyCustomAdapter mAdapter;
    private TCPClient mTcpClient;
    MyApplication application;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        arrayList = new ArrayList<String>();

        final EditText editText = (EditText) findViewById(R.id.editText);
        Button send = (Button)findViewById(R.id.send_button);

        Button change = (Button)findViewById(R.id.buttonchange);

        //relate the listView from java to the one created in xml
        mList = (ListView)findViewById(R.id.list);
        mAdapter = new MyCustomAdapter(this, arrayList);
        mList.setAdapter(mAdapter);

        application = (MyApplication) this.getApplication();

        // connect to the server
        application.SetConnessione() ;

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String message = editText.getText().toString();

                //add the text in the arrayList
                arrayList.add("c: " + message);

                //sends the message to the server
                application.InviaDati(message);

                //refresh the list
                mAdapter.notifyDataSetChanged();
                editText.setText("");
            }
        });

        change.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(
                        getApplicationContext(),
                        MpgActivity.class
                );
                startActivity(intent);

            }
        });



    }

}

Codice: [Seleziona]
public class MyApplication extends Application {

    ArrayList<String> al = new ArrayList<String>();

    private TCPClient mTcpClient;

    public void SetConnessione(){
        // connect to the server
        new connectTask().execute("");
    }

    public void InviaDati(String s){

        //sends the message to the server
        if (mTcpClient != null) {
            mTcpClient.sendMessage(s);
        }
    }


    public class connectTask extends AsyncTask<String,String,TCPClient> {

        @Override
        protected TCPClient doInBackground(String... message) {

            //we create a TCPClient object and
            mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() {
                @Override
                //here the messageReceived method is implemented
                public void messageReceived(String message) {
                    //this method calls the onProgressUpdate
                    //publishProgress(message);
                }
            });
            mTcpClient.run();

            return null;
        }

        @Override
        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);

            //in the arrayList we add the messaged received from server
            arrayList.add(values[0]);
            // notify the adapter that the data set has changed. This means that new message received
            // from server was added to the list
            mAdapter.notifyDataSetChanged();
        }
    }

    }

Il trehad della connessione prima era nell'activity principale e non c'erano problemi ora però non so come andare a leggere i dati in ingresso avendo spostato nella classe che sfrutta application contex...Spero che qualcuno possa aiutarmi grazie
Idee di Legno - Realizzazione oggeti di legno
 http://www.ideedilegno.it