Autore Topic: Cambiare TextView in base all'orario  (Letto 1273 volte)

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Cambiare TextView in base all'orario
« il: 13 Novembre 2012, 14:59:13 CET »
0
Hi there, ho bisogno di aggiornare una text view in base all'orario. Vi faccio un esempio: nella schermata principale dell'app di un negozio devo visualizzare la scritta "aperto" o "chiuso" a seconda dell'orario. Come posso fare?
True perfection has to be imperfect

Offline Script

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia Neo 4.0.4
  • Play Store ID:
    scriptsoft application
  • Sistema operativo:
    Windows 7
Re:Cambiare TextView in base all'orario
« Risposta #1 il: 13 Novembre 2012, 15:55:05 CET »
0
Hi there, ho bisogno di aggiornare una text view in base all'orario. Vi faccio un esempio: nella schermata principale dell'app di un negozio devo visualizzare la scritta "aperto" o "chiuso" a seconda dell'orario. Come posso fare?


ciao prova con questo dovrebbe funzionare

Codice (Java): [Seleziona]
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       

        //TEXTVIEW su cui stampare APERTO o CHIUSO
        insegna = (TextView) findViewById(R.id.text);

       
        myTimer = new Timer();
                myTimer.schedule(new TimerTask() {                     
                        @Override
                        public void run() {
                                TimerMethod();
                        }
                //OTTIENE L'ORA OGNI 5 MINUTI
                }, 0, 300000);         
    }

   
     private void TimerMethod()
    {
        this.runOnUiThread(azione);
    };



    private Runnable azione = new Runnable() {
        public void run() {
            GregorianCalendar gc = new GregorianCalendar();

                        //APERTO DALLE  8 ALLE 19
                        if(gc.getTime().getHours()>=8 && gc.getTime().getHours()<19)
                        {
                                insegna.setText("APERTO");
                        }
                        else
                        {
                                insegna.setText("CHIUSO");
                        }
        }
    };


sono nuovo quindi ci sarà sicuramenti un metodo più semplice ;-)
« Ultima modifica: 13 Novembre 2012, 18:32:40 CET da Script »


Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Re:Cambiare TextView in base all'orario
« Risposta #2 il: 13 Novembre 2012, 17:59:42 CET »
0

ciao prova con questo dovrebbe funzionare

Codice (Java): [Seleziona]
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       

        //TEXTVIEW su cui stampare APERTO o CHIUSO
        insegna = (TextView) findViewById(R.id.text);

       
        myTimer = new Timer();
                myTimer.schedule(new TimerTask() {                     
                        @Override
                        public void run() {
                                TimerMethod();
                        }
                //OTTIENE L'ORA OGNI 5 MINUTI
                }, 0, 300000);         
    }

   
     private void TimerMethod()
    {
        this.runOnUiThread(azione);
    };



    private Runnable azione = new Runnable() {
        public void run() {
            GregorianCalendar gc = new GregorianCalendar();

                        //APERTO DALLE  8 ALLE 19
                        if(gc.getTime().getHours()>=8 && gc.getTime().getHours()<=19)
                        {
                                insegna.setText("APERTO");
                        }
                        else
                        {
                                insegna.setText("CHIUSO");
                        }
        }
    };


sono nuovo quindi ci sarà sicuramenti un metodo più semplice ;-)

eheh anche io sono nuovo... comunque qua mi da sempre che è aperta...
True perfection has to be imperfect

Offline Script

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia Neo 4.0.4
  • Play Store ID:
    scriptsoft application
  • Sistema operativo:
    Windows 7
Re:Cambiare TextView in base all'orario
« Risposta #3 il: 13 Novembre 2012, 18:32:17 CET »
0
eheh anche io sono nuovo... comunque qua mi da sempre che è aperta...


il codice è fatto in modo che risulti APERTO tra le 8 e le 19, mentre dalle 19 in poi CHIUSO.
grazie a qusta parte di codice:
Codice (Java): [Seleziona]
 if(gc.getTime().getHours()>=8 && gc.getTime().getHours()<19)
EDIT
si prima avevo scritto   gc.getTime().getHours()<=19   invece di gc.getTime().getHours()<19  :D avrebbe restituito CHIUSO dopo le 20
« Ultima modifica: 13 Novembre 2012, 18:47:19 CET da Script »


Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Re:Cambiare TextView in base all'orario
« Risposta #4 il: 14 Novembre 2012, 09:23:26 CET »
0

ciao prova con questo dovrebbe funzionare

Codice (Java): [Seleziona]
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       

        //TEXTVIEW su cui stampare APERTO o CHIUSO
        insegna = (TextView) findViewById(R.id.text);

       
        myTimer = new Timer();
                myTimer.schedule(new TimerTask() {                     
                        @Override
                        public void run() {
                                TimerMethod();
                        }
                //OTTIENE L'ORA OGNI 5 MINUTI
                }, 0, 300000);         
    }

   
     private void TimerMethod()
    {
        this.runOnUiThread(azione);
    };



    private Runnable azione = new Runnable() {
        public void run() {
            GregorianCalendar gc = new GregorianCalendar();

                        //APERTO DALLE  8 ALLE 19
                        if(gc.getTime().getHours()>=8 && gc.getTime().getHours()<19)
                        {
                                insegna.setText("APERTO");
                        }
                        else
                        {
                                insegna.setText("CHIUSO");
                        }
        }
    };


sono nuovo quindi ci sarà sicuramenti un metodo più semplice ;-)

ok risolto! grazie!
True perfection has to be imperfect

Offline davidino81

  • Utente junior
  • **
  • Post: 66
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc one v
  • Sistema operativo:
    Windows 7
Re:Cambiare TextView in base all'orario
« Risposta #5 il: 06 Dicembre 2012, 12:22:09 CET »
0
Io ho seguito questo metodo ma mi da errore, carica il primo orario ma quando deve caricare il secondo va il crash.
Qualcuno sa dirmi perché ?


Codice (Java): [Seleziona]
public class PunteggioActivity extends Activity implements OnClickListener {

        private Button but_menu_punt;
        private TextView ora;


        protected void onCreate(Bundle savedInstanceState){
                super.onCreate(savedInstanceState);
                setContentView(R.layout.punteggio);

                but_menu_punt = (Button) findViewById(R.id.but_menu_punteggio);
                but_menu_punt.setOnClickListener(this);

                ora= (TextView)findViewById(R.id.ora_punteggio);
                Timer  myTimer = new Timer();

                final SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
                TimerTask task = new TimerTask(){

                        @Override
                        public void run() {
                                Date data = new Date(System.currentTimeMillis());
                                ora.setText(sdf.format(data));
                        }

                };

                myTimer.schedule(task, 0, 3000);


        }

        public void onClick(View v) { // da mettere sempre perché OnclickListener è una classe astratta

                switch(v.getId()){ //

                case R.id.but_menu_punteggio:


                        Intent menu = new Intent(getApplicationContext(), FirstActivity.class);
                        startActivity(menu);

                        break; // serve se no finito il case andrebbe a quello sotto
                }
        }      

}

LOGCAT

Codice: [Seleziona]
12-06 11:12:16.501: W/dalvikvm(1290): threadid=7: thread exiting with uncaught exception (group=0x4001d800)
12-06 11:12:16.507: E/AndroidRuntime(1290): FATAL EXCEPTION: Timer-0
12-06 11:12:16.507: E/AndroidRuntime(1290): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.view.ViewRoot.requestLayout(ViewRoot.java:594)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.view.View.requestLayout(View.java:8125)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.view.View.requestLayout(View.java:8125)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.view.View.requestLayout(View.java:8125)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.view.View.requestLayout(View.java:8125)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:254)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.view.View.requestLayout(View.java:8125)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.widget.TextView.checkForRelayout(TextView.java:5378)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.widget.TextView.setText(TextView.java:2688)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.widget.TextView.setText(TextView.java:2556)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at android.widget.TextView.setText(TextView.java:2531)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at com.example.parolemiscelateproject.PunteggioActivity$1.run(PunteggioActivity.java:38)
12-06 11:12:16.507: E/AndroidRuntime(1290):         at java.util.Timer$TimerImpl.run(Timer.java:289)

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Cambiare TextView in base all'orario
« Risposta #6 il: 06 Dicembre 2012, 13:51:42 CET »
+1
Il perché è autoesplicato dall'eccezione:

Codice (Java): [Seleziona]
Only the original thread that created a view hierarchy can touch its views.
Per risolvere la cosa dai > un'occhiata qui <