Autore Topic: Cambiare stato ToggleButton (o textview o widget) da un processo asincrono  (Letto 380 volte)

Offline scorpy86

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Sistema operativo:
    Ubuntu 12.10 - Windows 7
Buongiorno, questo è il mio primo post.
Ho una activity con un ToggleButton che nel caso sia On fà partire la registrazione su GCM

Codice (Java): [Seleziona]
//chiamato quando clicco il ToggleButton
    public void onPushStateButtonClicked(View view) {
                // controllo se il bottone è su on
                boolean on = ((ToggleButton) view).isChecked();
                PushClientService p = new PushClientService();
                if (on) {
                    savePushStateButton(true);
                    // se il bottone  in impostazioni è settato ad on registro il dispositivo
                    p.pushService(this);
                }else if(!on) {
                    savePushStateButton(false);
                    // se il bottone  in impostazioni è settato ad on cancello il dispositivo
                    //nel caso sia il primo accesso essendo il bottone a false di default preveniamo l'eccezione
                    try{    
                        GCMRegistrar.unregister(this);
                    }catch(IllegalArgumentException iAE){
                        Log.e("Errore:","stai cercando di cancellate un device non registrato");
                    }
                }
            }

nel metodo onRegistered della classe GCMIntentService al ritorno dall'asseganzione dell'id effettuo la chiamata al mio server per registrare l'id.

Codice (Java): [Seleziona]
protected void onRegistered(Context context, String registrationId) {
            Log.i(TAG, "Device registered: regId = " + registrationId);
            Log.d("onRegistered", getString(R.string.gcm_registered));
            boolean myServerRegistration=ServerUtilities.customRegistration(context, registrationId);
            if(!myServerRegistration){
                // Errore sulla registrazione sul server, deregistro il device
                GCMRegistrar.unregister(context);
                //???? imposto il ToggleButton su off ???

            }
        }


nel caso la chiamata al mio server, non vada a buon fine devo reimpostare il ToggleButton su off, come posso fare?non ho proprio idee, poiché è in un processo a parte!

Post unito: 29 Marzo 2013, 17:45:05 CET
Ho risolto da sola il problema posto la soluzione per chi è interessato
Nell' activity ho fatto questo:

Codice (Java): [Seleziona]
// Set AppSettings object into GCMIntentService
                GCMIntentService.setActivityMain(AppSettings.this);

e nella classe GCMIntentService ho fatto questo:

Codice (Java): [Seleziona]
protected static AppSettings activityMain;
Codice (Java): [Seleziona]
public static void setActivityMain(AppSettings a){
        activityMain = a;
    }
        // run on UI thread
        public void changePushStateButtonStatus(){
               
                activityMain.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                activityMain.pushStateButton.setChecked(false);    
            }
        });
    }

Codice (Java): [Seleziona]
protected void onRegistered(Context context, String registrationId) {
        Log.i(TAG, "Device registered: regId = " + registrationId);
        Log.d("onRegistered", getString(R.string.gcm_registered));
        boolean myServerRegistration=ServerUtilities.customRegistration(context, registrationId);
        if(!rmyServerRegistration){
                // Error on our server registration, unregister the device
                GCMRegistrar.unregister(context);
                // Save on sharedPreference the button status
                savePushStateButton(false);
                // Start a thread on UI to change the button status
                changePushStateButtonStatus();
        }
    }
« Ultima modifica: 29 Marzo 2013, 17:45:48 CET da scorpy86 »