Autore Topic: Accesso a un TextView  (Letto 574 volte)

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Accesso a un TextView
« il: 27 Maggio 2014, 16:57:38 CEST »
0
Salve,

sto cercando di creare un fonometro, ma a differenza delle progressbar inserite nell'activity, non riesco a cambiare il testo dei textview e l'applicazione si blocca.

Codice (Java): [Seleziona]
package systemgvp.fonometro.app;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import android.media.MediaRecorder;
import android.widget.ProgressBar;
import android.widget.TextView;


public class MainActivity extends Activity {

    //per il microfono
    private MediaRecorder Microfono;
    private double decibel, derivata_decibel_precedente, punti_decibel,
            decibel_min, decibel_Max, decibel_med;
    //private Timer TimerMicrofono, TimerStampa;

    //per l'asperità
    private double derivata_decibel, buche_FON;

    private TextView tminimo_TXT, tmedio_TXT, tmassimo_TXT, tcontinuo_TXT;
    private ProgressBar minimo_Bar, medio_Bar, massimo_Bar, continuo_Bar;

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

        tminimo_TXT   = (TextView) findViewById(R.id.minimo_TXT);
        tmedio_TXT    = (TextView) findViewById(R.id.medio_TXT);
        tmassimo_TXT  = (TextView) findViewById(R.id.massimo_TXT);
        tcontinuo_TXT = (TextView) findViewById(R.id.continuo_TXT);

        minimo_Bar   = (ProgressBar) findViewById(R.id.minimo_Bar);
        medio_Bar    = (ProgressBar) findViewById(R.id.medio_Bar);
        massimo_Bar  = (ProgressBar) findViewById(R.id.massimo_Bar);
        continuo_Bar = (ProgressBar) findViewById(R.id.continuo_Bar);

        //imposta il microfono
        Microfono = new MediaRecorder();
        Microfono.setAudioSource(MediaRecorder.AudioSource.MIC);
        Microfono.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //THREE_GPP
        Microfono.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        //Microfono.setAudioSamplingRate(8); //Hz Per esempio, la frequenza di campionamento supportata da AAC audio coding standard varia da 8 a 96 kHz,
        //la frequenza di campionamento supportata da AMRNB è 8kHz, e la frequenza di campionamento supportata da AMRWB è 16kHz.

        decibel       = 0.0; derivata_decibel_precedente = 0.0; punti_decibel = 0.0;
        decibel_min   = 0.0; decibel_med = 0.0; decibel_Max = 0.0;
        //per l'asperità
        derivata_decibel = 0.0;

        //attiva il microfono
        //File cartella = new File(Environment.getExternalStorageDirectory(), "ScuolaGuida_Audio"); if(!cartella.exists()) { cartella.mkdir(); }
        //File fileaudio = new File(cartella, missione+".mp3"); if(fileaudio.exists()) { fileaudio.delete(); }
        Microfono.setOutputFile("/dev/null"); //fileaudio.toString());
        try { Microfono.prepare();
            Microfono.start();
            LetturaDatiMicrofono();
            TimerDiStampa();
        }
        catch (IllegalStateException e) { e.printStackTrace(); Log.e("DEBUG", "Problema microfono IllegalStateException " + e.toString()); }
        catch (IOException e) { e.printStackTrace(); Log.e("DEBUG", "Problema microfono IOException " + e.toString()); }

    }

    public void TimerDiStampa() {
        int startUp = 0;    // millisecondi di attesa per fare partire il timer
        int periodo = 1000; // millisecondi di attesa per la ripetizione del timer
        Timer TimerStampa = new Timer();
        //il metodo run viene eseguito ad ogni scadenza del timer
        TimerStampa.scheduleAtFixedRate( new TimerTask() {
            public void run()
            {
                //mostra le informazioni dal microfono
                buche_FON = 0;
                //se il microfono ha funzionato correttamente
                if (punti_decibel > 0) {
                    //calcola le accelerazioni medie
                    decibel_med = decibel_med / punti_decibel;
                    //calcola la variazione attuale di decibel in Z
                    double decibel_attuale = decibel_Max - decibel_min;
                    //variazione di tempo
                    double dT = 1;
                    //calcola la derivata
                    derivata_decibel = Math.abs(decibel_attuale - derivata_decibel_precedente) / dT;
                    //valuta la derivata per capire se ci sono anomalie o no
                    //if (derivata_decibel >= 10) { }
                    //aggiorna la variazione precedente dell'accelerazione in Z
                    derivata_decibel_precedente = decibel_attuale;
                    //dato da memorizzare
                    buche_FON = derivata_decibel;
                }
                else { decibel_Max = 0; decibel_med = 0; decibel_min = 0; }

                Log.i("DEBUG","Punti : "+String.valueOf(punti_decibel)+" med : "+String.valueOf(decibel_med)+" Max : "+String.valueOf(decibel_Max)+" Min : "+String.valueOf(decibel_min));

                tminimo_TXT.setText(String.valueOf(decibel_min));
                tmedio_TXT.setText(String.valueOf(decibel_med));
                tmassimo_TXT.setText(String.valueOf(decibel_Max));

                minimo_Bar.setProgress( (int) decibel_min);
                medio_Bar.setProgress((int) decibel_med);
                massimo_Bar.setProgress((int) decibel_Max);

                //riazzera i valori
                punti_decibel = 0;
            }
        }, startUp, periodo );
    }

    public void LetturaDatiMicrofono() {
        int startUp = 0;   // millisecondi di attesa per fare partire il timer
        int periodo = 100; // millisecondi di attesa per la ripetizione del timer
        Timer TimerMicrofono = new Timer();
        //il metodo run viene eseguito ad ogni scadenza del timer
        TimerMicrofono.scheduleAtFixedRate( new TimerTask() {
            public void run() {
                //calcola i decibel
                                /*double AmpiezzaDiRiferimento = 0.6;
                                double Ampiezza = Microfono.getMaxAmplitude()/2700.0;
                                decibel = 20 * Math.log10(Ampiezza / AmpiezzaDiRiferimento);
                                //db = 20 * Math.log(recorder.getMaxAmplitude() / 2700.0)
                                //eventuale correzione
                                if (decibel < 0) { decibel = 0.0; }
                                //Log.i("DEBUG","decibel : "+String.valueOf(decibel));
                                //http://developer.android.com/reference/android/media/MediaRecorder.html#getMaxAmplitude()
                                //http://stackoverflow.com/questions/10655703/what-does-androids-getmaxamplitude-function-for-the-mediarecorder-actually-gi
                                */

                double PressioneDiRiferimento = 0.00002;
                double PressioneSonora = Microfono.getMaxAmplitude()/51805.5336;
                //the value 51805.5336 can be derived from asuming that x=32767=0.6325 Pa
                //and x=1 = 0.00002 Pa (the reference value) [in Pascal]
                decibel = (20 * Math.log10(PressioneSonora/PressioneDiRiferimento));
                //eventuale correzione
                if (decibel < 0) { decibel = 0.0; }

                tcontinuo_TXT.setText(String.valueOf(decibel));
                continuo_Bar.setProgress( (int) decibel);
                Log.i("DEBUG","dB : "+String.valueOf(decibel));

                //incrementa il contatore
                punti_decibel = punti_decibel + 1;
                //minimi e massimi
                if (punti_decibel == 1) {
                    decibel_Max = decibel;
                    decibel_med = decibel;
                    decibel_min = decibel; }
                else {
                    //controlla i valori
                    if (decibel_Max < decibel) { decibel_Max = decibel; }
                    if (decibel_min > decibel) { decibel_min = decibel; }
                    //aggiunge una somma
                    decibel_med = decibel_med + decibel;
                }
            }
        }, startUp, periodo );
    }


    public void onBackPressed() {
        try { Microfono.stop();
            Microfono.release(); }
        catch (IllegalStateException e) { e.printStackTrace(); }
    }


}

Codice (XML): [Seleziona]
<LinearLayout
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
       android:text="@string/hello_world"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/minimo_TXT"
       android:textSize="40dp"
       android:textColor="#00FF00"
       android:layout_marginTop="20dp" />
    <ProgressBar
       style="?android:attr/progressBarStyleHorizontal"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/minimo_Bar"
       android:max="150" />

    <TextView
       android:text="@string/hello_world"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:id="@+id/medio_TXT"
       android:textSize="40dp"
       android:textStyle="bold"
       android:layout_marginTop="20dp" />
    <ProgressBar
       style="?android:attr/progressBarStyleHorizontal"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/medio_Bar"
       android:max="150" />

    <TextView
       android:text="@string/hello_world"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/massimo_TXT"
       android:textSize="40dp"
       android:textColor="#FF0000"
       android:layout_marginTop="20dp" />
    <ProgressBar
       style="?android:attr/progressBarStyleHorizontal"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/massimo_Bar"
       android:max="150" />

    <TextView
       android:text="@string/hello_world"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/continuo_TXT"
       android:textSize="40dp"
       android:textColor="#00ccFF"
       android:layout_marginTop="20dp" />
    <ProgressBar
       style="?android:attr/progressBarStyleHorizontal"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/continuo_Bar"
       android:max="150" />

</LinearLayout>

In entrambe i Timer bisognerebbe scrivere sui textview (naturalmente diversi per Timer) ma non riesce a farlo, mentre scrive tranquillamente il dato nel Log e nella progressbar

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Accesso a un TextView
« Risposta #1 il: 27 Maggio 2014, 17:40:31 CEST »
0
E' sicuramente qualcosa di banale. Comunque, posta il LogCat del crash così vediamo al volo qual'è la riga che genera l'errore.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Re:Accesso a un TextView
« Risposta #2 il: 27 Maggio 2014, 21:44:19 CEST »
0
Il Log è questo

Codice: [Seleziona]
05-27 21:42:52.921  32455-32455/systemgvp.fonometro.app W/System.err﹕ java.io.FileNotFoundException: /data/cust/xml/hw_launcher_load_icon.xml: open failed: ENOENT (No such file or directory)
05-27 21:42:52.921  32455-32455/systemgvp.fonometro.app W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:409)
05-27 21:42:52.921  32455-32455/systemgvp.fonometro.app W/System.err﹕ at java.io.FileInputStream.<init>(FileInputStream.java:109)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.content.res.ResourcesEx.readDefaultConfig(ResourcesEx.java:808)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.content.res.ResourcesEx.<init>(ResourcesEx.java:741)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:1721)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:1752)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.app.LoadedApk.getResources(LoadedApk.java:485)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.app.ContextImpl.init(ContextImpl.java:1911)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.app.ContextImpl.init(ContextImpl.java:1904)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4269)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.app.ActivityThread.access$1300(ActivityThread.java:145)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:99)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.os.Looper.loop(Looper.java:137)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5095)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:511)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
05-27 21:42:52.924  32455-32455/systemgvp.fonometro.app W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
05-27 21:42:52.928  32455-32455/systemgvp.fonometro.app W/System.err﹕ at libcore.io.Posix.open(Native Method)
05-27 21:42:52.928  32455-32455/systemgvp.fonometro.app W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
05-27 21:42:52.928  32455-32455/systemgvp.fonometro.app W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:400)
05-27 21:42:52.928  32455-32455/systemgvp.fonometro.app W/System.err﹕ ... 19 more

faccio presente anche che oggi ho aggiornato Android Studio e l'SDK all'ultima versione, ed è apparso un errore che non avevo mai visto:

Codice: [Seleziona]
java.io.FileNotFoundException: /data/cust/xml/hw_launcher_load_icon.xml: open (prima riga)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Accesso a un TextView
« Risposta #3 il: 28 Maggio 2014, 09:02:30 CEST »
0
Mmm, sembra ci sia più di una causa.

Comunque, per il LogCat dovresti cercare le righe con gli ERROR, quelle con la dicitura E/.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Re:Accesso a un TextView
« Risposta #4 il: 28 Maggio 2014, 10:51:48 CEST »
0
Purtroppo non capisco perché dopo l'aggiornamento Android Studio mi da solo questo.

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Re:Accesso a un TextView
« Risposta #5 il: 31 Maggio 2014, 11:00:03 CEST »
0
nessuna idea?