Buongiorno a tutti,
Il mio problema è il seguente:
Ho la finestra main con all'interno un TextView e la chiamata a AsyncTask.
All'interno di AsyncTask c'è un listener UDP che attende l'arrivo dei pacchetti per promptarli sulla textView ma, questo non succede, semplicemente passa oltre non attendendo l'arrivo dei pacchetti.
Se utilizzo invece un Thread per la cosa riesco a scrivere su un file di testo i valori che arrivano tramite UDP ma non riesco a visualizzarli sulla TextView.
Ho cercato di fare la cosa utilizzando vari snipplet da questo forum più altre cose... non so dove sbaglio ma lo faccio

.
Insomma, non so come trovare una soluzione. Sono alle prime armi ma non mi arrendo.
Secondo Voi dov'è il problema? Se qualcuno mi potesse aiutare sarebbe fantastico e poi potrebbe essere utilizzato anche da altri che incontrano questo problema.
Posto il codice di come è adesso:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Random;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Demo extends Activity {
TextView loadingTv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
loadingTv = (TextView) findViewById(R.id.loadingTv);
Button start = (Button) findViewById(R.id.startButton);
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
LoadingStuffTask task = new LoadingStuffTask();
task.execute("Process started!");
//la stringa verra passata al metodo doInBackground del nostro AsyncTask
//per controllare lo stato del task, possiamo chiamare task.getStatus()
}
});
}
private class LoadingStuffTask extends AsyncTask<String, String, String> {
// I tre tipi da dichiarare sono relativamente (in questo caso usiamo solo stringhe)
// il parametro in entrata di doInBackground (quando chiamiamo execute passiamo una stringa)
// il paramentro in entrata di onProgressUpdate (dati che vogliamo mostrare all' utente -opzionale,potremmo usare variabili globali-)
// il parametro in entrata di onPostExecure (una volta finito il task, potremmo voler mostrare un risultato all'utente)
// nel caso non volessimo usare parametri di alcun genere tipizziamo con Void,Void,Void (passeremo poi dei null come parametri)
@Override
protected String doInBackground(String... params) {
publishProgress("\n" + params[0]);
// stringa passata a onProgressUpdate
byte[] buf = new byte[100];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
try {
DatagramSocket socket;
socket = new DatagramSocket(10000);//(SERVERPORT, serverAddr);
socket.receive(packet);
publishProgress(new String(packet.getData()).trim());
//write("'" + new String(packet.getData()).trim() + "'");
//URL=new String(packet.getData()).trim();
socket.close();
} catch (IOException e) {
} catch (Exception u) {
}
Random rand = new Random();
publishProgress("Ho saltato tutto!");
return "Finish !";
// stringa passata a onPostExecute
}
@Override
protected void onProgressUpdate(String... values) {
loadingTv.append(values[0] + "\n");
}
@Override
protected void onPostExecute(String result) {
loadingTv.append(result + "\n");
}
}
}Grazie a tutti quelli che vorranno sbatterci la testa o risolvere.
