Autore Topic: Bottone con testo che cambia ogni tot secondi...  (Letto 892 volte)

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Bottone con testo che cambia ogni tot secondi...
« il: 08 Marzo 2011, 16:25:10 CET »
0
Ragazzi sto cercando di implementare un bottone che cambia testo ogni 2 secondi tramite 2 frasi che ho, il problema è che la prima frase è dimanica.
Ho cercato di implementare ma l'app crasha!
qua il pezzo di codice incriminato:
Codice: [Seleziona]
                try{
                    URL url = new URL("miourl");
                    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
                                while((testo=in.readLine()) != null){
                                        testo2+=testo;
                                }
                                in.close();
                                JSONObject jObject = new JSONObject(testo2);
                                final String primotesto="Valore\n"+jObject.getString("n")+"\n megabyte";
                                final String secondotesto="Clicca e\naspetta";
                                Timer timer = new Timer();
                                timer.scheduleAtFixedRate(new TimerTask(){
                                @Override
                                public void run (){
                                        if(button.getText()==secondotesto){
                                                button.setText(primotesto);
                                        }else{
                                                button.setText(secondotesto);
                                        }
                                }
                                },2000,2000);
                }
                catch(MalformedURLException e){}
                catch(IOException e){}
                catch(JSONException e){}
la timer devo tenerla per forza dentro al try perchè se no le variabili stringa non vengono riconosciute.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Bottone con testo che cambia ogni tot secondi...
« Risposta #1 il: 08 Marzo 2011, 16:38:24 CET »
0
Bah, qui è tutto un casino...
primo non puoi lanciare connessioni HTTP cosi ogni due secondi,magari la connessione dura 3 secondi causa problemi e sei fregato...
secondo usa un AsyncTask,gestisce meglio la cosa
Terzo, un consiglio, scaricati prima le stringhe e poi cambiale ogni due secondi
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Re:Bottone con testo che cambia ogni tot secondi...
« Risposta #2 il: 08 Marzo 2011, 17:01:38 CET »
0
no ma di http ne chiamo una sola, ogni sec. vorrei scambiare le frasi e basta

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Bottone con testo che cambia ogni tot secondi...
« Risposta #3 il: 08 Marzo 2011, 17:20:47 CET »
0
Se posso :
Citazione da: Nicola_D
primo non puoi lanciare connessioni HTTP cosi ogni due secondi...
Credo che in questo caso non lanci connessioni HTTP ogni due secondi...o forse mi sbaglio :-P
 
Quello che vedo dal codice e che viene effettuato un controllo da un timerTask ogni 2 secondi, peraltro non usare == per il controllo di uguaglianza nelle stringhe, ma bensì equals()
Potresti riscrivere, oltretutto, questo :
Codice (Java): [Seleziona]
if(button.getText()==secondotesto){
   button.setText(primotesto);
}else{
   button.setText(secondotesto);
}
In questo :
Codice (Java): [Seleziona]
String mTesto = button.getText().equals(secondotesto) ? primotesto : secondotesto ;
button.setText(mTesto);

Citazione da: zak84
la timer devo tenerla per forza dentro al try perchè se no le variabili stringa non vengono riconosciute.
Questa non l'ho capita  o_O

Se "secondotesto" è una costante, dichiarala come tale nella parte relativa alle dichiarazioni :
Codice (Java): [Seleziona]
Private static final String SECONDO_TESTO = "Clicca e\naspetta"
E così sei apposto, per la stringa variabile crea un metodo che ti ritorni un valore String dopo aver letto il buffer...ma come dice Nicola_D, per non incasinare la GUI e "freezarla" effettua questa operazione in modo asincrono.

E per ultimo, a cosa ti serve un controllo ogni 2 secondi con un timer sul testo di un bottone ?  :-o

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Re:Bottone con testo che cambia ogni tot secondi...
« Risposta #4 il: 08 Marzo 2011, 17:29:21 CET »
0
perchè devo cambiare il testo del bottone ogni 2 secondi... come un fade.
per la cosa del try... se metto tutto fuori non mi riconosce le variabili, mi dice:
primotesto cannot be resolved to a variable
se la lascio dentro al try, ance con le tue modifiche, il bottone rimane senza testo e poi l'app crasha

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Bottone con testo che cambia ogni tot secondi...
« Risposta #5 il: 08 Marzo 2011, 17:45:21 CET »
0
Citazione da: zak84
il bottone rimane senza testo e poi l'app crasha

Il bottone probabilmente non è stato inizializzato nell'onCreate (sempre che la tua sia una Activity) o nel layout xml (sempre che tu abbia creato un layout), pertanto non ha testo.
Quando crasha cosa dice il logcat ? Analizza il logcat al momento del crash, il problema potrebbe scaturire quando viene eseguita la lettura del buffer...oppure dal timerTask.

Comunque se fossi in te ristrutturerei il codice :-P

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re: Bottone con testo che cambia ogni tot secondi...
« Risposta #6 il: 08 Marzo 2011, 18:00:28 CET »
0
Il problema è che non puoi accedere ai controllo dalla UI da thread secondari ... usa un Handler.
Cmq zak84 i prossimi topic che apri senza logcat ti verranno chiusi.

Sent from my HTC Desire
« Ultima modifica: 08 Marzo 2011, 20:56:16 CET da JD, Reason: Corretto un typo »