Autore Topic: problema con onResume e imageButton  (Letto 668 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
problema con onResume e imageButton
« il: 24 Settembre 2012, 21:22:16 CEST »
0
in un layout ho inserito un imageButton e ho creato un thread (con asynctask) che controlla continuamente se la connessione internet è attiva... se è attiva l'imagebutton avrà come immagine un pallino verde altrimenti ne avrà un pallino rosso... questo thread viene creato nel metodo onResume dell'activity... Se la connessione internet è attiva all'avvio dell'applicazione il pallino giustamente è verde. ma non appena cambia l'orientamento dello schermo il pallino diventa rosso come se il thread venisse cancellato... come posso risolvere questo problema?

inserisco il codice in modo che possa essere più chiaro:
Codice: [Seleziona]
public class MainActivity extends Activity {
       
        private CheckInternetConnection chkConnection;
        private ImageButton btnConnection;

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

        this.btnConnection = (ImageButton)this.findViewById(R.id.btnConnected);
        btnConnection.setEnabled(false);
}
    @Override
    protected void onResume() {
            chkConnection = new CheckInternetConnection((ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE), btnConnection);
            chkConnection.execute();
            super.onResume();
    }
}

Codice: [Seleziona]
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.widget.ImageButton;

public class CheckInternetConnection extends AsyncTask<String, Void, String> {

        private boolean connected = false;
        private ConnectivityManager cm;
        private ImageButton btnConnection;
        private boolean stop = false;
       
        public CheckInternetConnection(ConnectivityManager conn, ImageButton btn){
                cm = conn;
                btnConnection = btn;
        }
       
        @Override
        protected String doInBackground(String... arg0) {
                NetworkInfo netInfo;
                while (!stop){

                netInfo = cm.getActiveNetworkInfo();
                if (netInfo == null){
                        connected = false;
                        publishProgress();
                }
                else if (netInfo != null && netInfo.isConnectedOrConnecting()){
                        connected = true;
                        publishProgress();
                }
               
                try {
                                Thread.sleep(1000);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                       
                }
                return null;
               
        }
        @Override
        protected void onProgressUpdate(Void... values) {
                super.onProgressUpdate(values);
                if (!connected)
                        btnConnection.setImageResource(R.drawable.red_button);
                else
                        btnConnection.setImageResource(R.drawable.green_button);
        }
       
        public void stop(boolean c){
                stop = c;
        }
}

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
Re:problema con onResume e imageButton
« Risposta #1 il: 28 Settembre 2012, 14:52:25 CEST »
0
Risolto aggiungendo nel manifest android:configChanges="orientation|screenSize"
e nella mia activity, questo metodo
Codice (Java): [Seleziona]
@Override
public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
}

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:problema con onResume e imageButton
« Risposta #2 il: 28 Settembre 2012, 14:52:52 CEST »
0
non so se sia la soluzione giusta, mapotresti inserire una cosa cosi per fare in modo che a ogni rotazione del telefono, riparta il controllo della connessione:

Codice (Java): [Seleziona]
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
       chkConnection.execute();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        chkConnection.execute();
    }
}
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

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
Re:problema con onResume e imageButton
« Risposta #3 il: 28 Settembre 2012, 14:59:43 CEST »
0
avevo gia provato ma credo che sia molto piu semplice e veloce la soluzione che ho adottato io

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:problema con onResume e imageButton
« Risposta #4 il: 28 Settembre 2012, 17:26:21 CEST »
0
Ma non ti conviene usare un BroadcastReceiver che intercetti i cambiamenti della connettività? Così eviti di bruciare giri di processore a vuoto solo a stare in ascolto....

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
Re:problema con onResume e imageButton
« Risposta #5 il: 28 Settembre 2012, 17:42:03 CEST »
0
grazie del consiglio, come soluzione ho preso spunto da qua: http://android-er.blogspot.it/2011/01/monitor-wifi-status-and-information.html
« Ultima modifica: 01 Ottobre 2012, 08:58:27 CEST da topix93 »