Il modo più semplice per farlo sarebbe solo per fare qualcosa di simile
//Body of your click handler
Thread thread = new Thread(new Runnable(){
@Override
public void run(){
//code to do the HTTP request
}
});
thread.start();
che farà sì che il codice all'interno del metodo run()
per eseguire in un nuovo thread di esecuzione. Puoi guardare in un compito asincrono se vuoi, anche se personalmente non l'ho mai usato. Questo è un modo semplice e veloce per fare le cose.
Per quanto riguarda il ritorno delle informazioni, utilizzerei uno Handler object che consente effettivamente di impostare una coda di messaggi per un dato thread e di passarci messaggi che causano l'esecuzione di codice specifico. Il motivo per cui è necessario farlo è perché Android non consente a nessun thread diverso dal thread dell'interfaccia utente di aggiornare l'interfaccia utente effettiva.
Questo risponde alla tua domanda? So che il mio primo passaggio non ha risolto completamente tutti i tuoi problemi.
Modifica In sostanza, quello che fai è definire un oggetto gestore nella tua Activity
come
private Handler handler_ = new Handler(){
@Override
public void handleMessage(Message msg){
}
};
È inoltre possibile creare statici int
costanti che aiutano a raccontare il gestore che cosa fare. In pratica si usano quelli per consentire la trasmissione di diversi tipi di messaggi a un'istanza di un gestore. Se ci sarà solo un messaggio che viene restituito, non devi preoccuparti di questo.
Per esempio
private static final int UPDATE_UI = 1;
Per inviare un messaggio al gestore si chiama
handler_.sendMessage(Message.obtain(handler_, UPDATE_UI, inputStreamInstance));
da parte del conduttore:
private Handler handler_ = new Handler(){
@Override
public void handleMessage(Message msg){
switch(msg.what){
case UPDATE_UI:
InputStream is = (InputStream)msg.obj;
//do what you need to with the InputStream
break;
}
}
};
In alternativa, in cui si aggiunge l'inputStreamInstance al Message
oggetto, puoi passare qualsiasi oggetto che ti piace se lo volevi analizzare a qualche tipo di oggetto contenitore o qualcosa del genere, potresti farlo anche tu. È sufficiente restituirlo a quell'oggetto dall'interno del gestore.
Grazie per l'aiuto. Sto ancora avendo qualche problema per quanto riguarda l'invio e la ricezione di informazioni dal thread separato. Ho aggiornato la mia domanda per spero di chiarire cosa devo fare. Per quanto riguarda l'oggetto Handler, lo userei nel thread secondario, per passare informazioni, ad esempio il flusso di input? – mbauer14