Autore Topic: modificare imagebutton da thread  (Letto 742 volte)

Offline topix93

  • Utente junior
  • **
  • Post: 84
  • Respect: +1
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus ONE
  • Sistema operativo:
    Windows 7 Professional 64 bit, Ubuntu 11.04
modificare imagebutton da thread
« il: 19 Settembre 2012, 16:10:47 CEST »
0
ho un thread (creato con asynctask) il quale controlla perennemente se la connessione internet è attiva... non appena si spegne il wifi oppure avviene una disconnessione voglio fare in modo che il thread vada a modificare l'immagine di un imagebutton, purtroppo però ricevo quest'errore:

FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:278)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:709)
at android.view.View.requestLayout(View.java:12680)
at android.view.View.requestLayout(View.java:12680)
at android.view.View.requestLayout(View.java:12680)
at android.view.View.requestLayout(View.java:12680)
at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:268)
at android.view.View.requestLayout(View.java:12680)
at android.widget.ImageView.setImageResource(ImageView.java:316)
at com.bertero.MicroMagNavigator.MainActivity$CheckInternetConnection.doInBackground(MainActivity.java:238)
at com.bertero.MicroMagNavigator.MainActivity$CheckInternetConnection.doInBackground(MainActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
... 5 more


questa e la classe asynctask:

Codice: [Seleziona]
class CheckInternetConnection extends AsyncTask<String, Void, String> {

                @Override
                protected String doInBackground(String... arg0) {
                        NetworkInfo netInfo;
                        while (true){

                    netInfo = cm.getActiveNetworkInfo();
                    if (netInfo == null)
                            btnConnection.setImageResource(R.drawable.red_button);
                    else if (netInfo != null && netInfo.isConnectedOrConnecting())
                            btnConnection.setImageResource(R.drawable.green_button);
                    }
                }


        }

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:modificare imagebutton da thread
« Risposta #1 il: 19 Settembre 2012, 16:52:28 CEST »
0
Citazione
Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Tradotto: solo il thread di UI può toccare le view.

In pratica per aggiornare la UI durante l'esecuzione della doinbackground, devi usare la funzione publishProgress() per passare il parametro e poi nella funzione per aggiornare onProgressUpdate(), fai quello che devi.

Eventualmente nella documentazione AsyncTask vedi come usarli : AsyncTask | Android Developers
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store