Autore Topic: Visualizzare risultati su TextView  (Letto 1232 volte)

Offline vecio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Visualizzare risultati su TextView
« il: 21 Gennaio 2012, 16:57:22 CET »
0
Buonasera a tutti,
ho un problema con la visualizzazione dei risultati su diverse TextView. Ecco il codice(Sotto al codice trovate la spiegazione del codice)

Layout
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>

<!-- Main Layout of Status Activity -->
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="horizontal"
   android:stretchColumns="5" >

    <TableRow >

        <ImageView
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:src="@drawable/logo_sms" />
       
    </TableRow>
   
   
  <TableRow >
       
    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       />

    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:text="Ora"
       android:gravity="center" />
   
    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:text="Valore"
       android:gravity="center"  />
   
    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:text="Unità"
       android:gravity="center"  />
   
    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:text="Fault"
       android:gravity="center"  />
    </TableRow>
   
      <TableRow >
       
    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       />

    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:id="@+id/orario"/>
   
    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:id="@+id/valore"  />
   
    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:id="@+id/unita"  />
   
    <TextView
       android:layout_width="90px"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:id="@+id/numFault"  />
    </TableRow>
   

</TableLayout>


Qui c'è una tabella con 2 righe e un numero uguale di colonne. La prima riga visualizza solo delle etichette che sono le descrizioni delle colonne. E sotto ci sono le celle dove andranno i valori e perciò hanno id.

Codice dell'Activity principale
Codice: [Seleziona]
public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.status);
             c = this;
             
             final SMS_WSN wsn = new SMS_WSN();
             
             orario = (TextView) findViewById(R.id.orario);
             val_max = (TextView) findViewById(R.id.valore);
             unit = (TextView) findViewById(R.id.unita);
             fault = (TextView) findViewById(R.id.numFault);
             
             final FileRilevazioni fr = new FileRilevazioni();
             final GestoreRilevazioni gr = new GestoreRilevazioni(c);
             
             try {
                        fr.openFile(c);
                } catch (IOException e) {
                        e.printStackTrace();
                }
                       
                        class MyTask extends TimerTask {

                            public void run() {
                                    try {
                                            String str = fr.readLine();
                                            Rilevazione aRilevation = wsn.createRilevation(str, gr.checkStructure(str));
                                            gr.sendRilToStorico(aRilevation);
                                                gr.sendRilToJournaling(aRilevation);
                                               
                                                orario.setText(aRilevation.getOra());
                                                val_max.setText(aRilevation.getValMax());
                                                unit.setText("CPM");
                                                fault.setText(aRilevation.getNumFault() + "/10");
                                               
                                    }
                                    catch (NoSuchElementException e) {
                                           
                                            System.out.println("Non ci sono più righe da leggere");
                                            System.exit(1);
                                           
                                    }
                            }
                        }

                       
                        Timer timer = new Timer();
                        TimerTask task = new MyTask();
                        timer.schedule( task, 5000, 5000 );
             

          }

Qui c'è il log
Citazione
01-21 15:28:19.475: I/System.out(5745): 24/12/201 20:05:05 154 CPM 0/10
01-21 15:28:19.494: W/dalvikvm(5745): threadid=7: thread exiting with uncaught exception (group=0x4001d800)
01-21 15:28:19.514: E/AndroidRuntime(5745): FATAL EXCEPTION: Timer-0
01-21 15:28:19.514: E/AndroidRuntime(5745): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
01-21 15:28:19.514: E/AndroidRuntime(5745):    at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at android.view.ViewRoot.invalidateChild(ViewRoot.java:607)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:633)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at android.view.ViewGroup.invalidateChild(ViewGroup.java:2505)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at android.view.View.invalidate(View.java:5139)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at android.widget.TextView.checkForRelayout(TextView.java:5364)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at android.widget.TextView.setText(TextView.java:2688)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at android.widget.TextView.setText(TextView.java:2556)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at android.widget.TextView.setText(TextView.java:2531)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at core.sms.mobile.SMSMobile2Activity$1MyTask.run(SMSMobile2Activity.java:54)
01-21 15:28:19.514: E/AndroidRuntime(5745):    at java.util.Timer$TimerImpl.run(Timer.java:289)
01-21 15:28:27.927: I/Process(5745): Sending signal. PID: 5745 SIG: 9

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7

Offline vecio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Visualizzare risultati su TextView
« Risposta #2 il: 21 Gennaio 2012, 17:21:52 CET »
0
Giusto perché sono una persona educata non ti rispondo a tono...cmq ho già provato e sto continuando a cercare un risultato(su google) che soddisfi la mia richiesta.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Visualizzare risultati su TextView
« Risposta #3 il: 21 Gennaio 2012, 17:31:16 CET »
0
Giusto perché sono una persona educata non ti rispondo a tono...cmq ho già provato e sto continuando a cercare un risultato(su google) che soddisfi la mia richiesta.

Mi sembra che nel primo risultato che esce con la ricerca proposta da MarcoDuff è spiegato il problema ed è spiegato come risolvere. O no?

Offline vecio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Visualizzare risultati su TextView
« Risposta #4 il: 21 Gennaio 2012, 17:37:21 CET »
0
beh se la classe TimerTask si comporta come un thread si potrebbe essere quella la soluzione...il che è probabile perché implementa l'interfaccia Runnable

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Visualizzare risultati su TextView
« Risposta #5 il: 21 Gennaio 2012, 17:59:38 CET »
0
TimerTask | Android Developers

Come puoi vedere dalla doc, implementa Runnable ;)
Anche perchè in Java non mi risulta che ci siano altri modi per usa il multithreading.

Offline vecio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Visualizzare risultati su TextView
« Risposta #6 il: 21 Gennaio 2012, 20:09:43 CET »
0
Si c'era un altro modo, si estendeva la classe Thread invece di implementare Runnable però non ricordo bene qual'era la procedura, l'ho fatto ad un esame di reti di calcolatori :). Speriamo sia questo domani vi aggiorno

Grazie

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Visualizzare risultati su TextView
« Risposta #7 il: 21 Gennaio 2012, 20:36:18 CET »
0
Si c'era un altro modo, si estendeva la classe Thread invece di implementare Runnable però non ricordo bene qual'era la procedura, l'ho fatto ad un esame di reti di calcolatori :). Speriamo sia questo domani vi aggiorno

Grazie
Perché la classe Thread già implementa Runnable di suo.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline vecio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Visualizzare risultati su TextView
« Risposta #8 il: 22 Gennaio 2012, 17:38:51 CET »
0
Ho risolto grazie a tutti

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Visualizzare risultati su TextView
« Risposta #9 il: 23 Gennaio 2012, 12:21:20 CET »
0
Giusto perché sono una persona educata non ti rispondo a tono...

Motivo la mia risposta.
Il tuo modo di chiedere aiuto è esemplare: hai postato l'xml, il codice ed addirittura il logcat. Tantissimi, direi troppi utenti, non sono in grado di farlo, quindi il fatto di trovare uno dei pochi che "perde tempo" nel dare le corrette informazioni è un bel passo in avanti per il nostro forum.
Il problema è che mi accorgo che cercando su google la stringa dell'eccezione del tuo errore "Only the original thread that created a view hierarchy can touch its views." del logcat escono i seguenti risultati:
Gestire Thread e GUI nelle applicazioni Android | Simplesoft.it
android - error: Only the original thread that created a view hierarchy can touch its views - Stack Overflow
android - How to access original activity's views from spawned background service - Stack Overflow
Android “Only the original thread that created a view hierarchy can touch its views.” | Techi Post

Il paradosso è che il primo di questi link è proprio un articolo in italiano (cosa rarissima) che spiega per filo e per segno il tuo problema dando la risoluzione.

A questo punto, io ho tre possibili scenari: postarti il link, fare copia ed incolla dell'articolo o riscriverti con parole mie quello che c'è scritto sull'articolo.

Il messaggio che volevo far passare è: prima di postare cerca su google. Se non risolvi, allora posta pure il tuo problema facendo riferimento ai link che hai visionato ed a cosa di quei link non hai capito!

Ho risolto grazie a tutti

Le risposte "Ho risolto grazie" lasciano molto il tempo che trovano. Spiega come hai risolto in modo tale che chi avrà un problema simile al tuo e si annoia a cercare su google la soluzione almeno trova la pappa pronta su un topic.

Grazie.


Offline vecio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Visualizzare risultati su TextView
« Risposta #10 il: 23 Gennaio 2012, 15:29:01 CET »
0
Hai ragione e ti chiedo scusa per la mia risposta.

Quell'articolo(Il primo in italiano) l'ho visto prima però non pensavo che il problema fosse legato a una questione di thread. Comunque ho risolto proprio con quella guida, e se per voi non ci sono problemi appena ho qualche minuto a disposizione scrivo una bella guida dettagliata da tenere nei tutorial di questo forum.

Nel frattempo per chi ha bisogno della soluzione vedete qui
http://www.simplesoft.it/android/gestire-thread-e-gui-nelle-applicazioni-android.html


Offline vecio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Visualizzare risultati su TextView
« Risposta #11 il: 24 Gennaio 2012, 00:03:09 CET »
0
Ho levato la spunta di topic risolto, perchè mi sono accorto di una cosa.

Con l'emulatore con Android 2.2 funziona bene. Ho provato il programma con il telefono di mio fratello e con Android 2.3 e non funziona.

Può dipendere dalla versione di Android o no??

Inoltre che comando devo settare un immagine in base al valore massimo che ho dalle rilevazioni. Che comando devo usare??(intendo per settare una determinata immagine)