Autore Topic: NullPointerException del tts alla sua seconda chiamata  (Letto 1070 volte)

Offline duky2003

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    LG P500
  • Sistema operativo:
    Windows xp, Ubuntu 10.10
NullPointerException del tts alla sua seconda chiamata
« il: 24 Giugno 2011, 10:31:51 CEST »
0
Salve a tutti!!!
ho implementato una classe TTS che mi permette di gestirlo con facilità, che viene chiamata da un service(tramite thread) all'arrivo di un messaggio, e poi richiamata da un activity(chiamando il TTS senza thread) per leggerlo, però funziona tutto al primo messaggio, ma al secondo mi dà un NullPointerException alla chiamata dal service:

Codice: [Seleziona]
06-24 10:20:49.475: ERROR/AndroidRuntime(19089): FATAL EXCEPTION: main
06-24 10:20:49.475: ERROR/AndroidRuntime(19089): java.lang.NullPointerException
06-24 10:20:49.475: ERROR/AndroidRuntime(19089):     at com.angsan.TelephonyManager.TTS.speak(TTS.java:48)
06-24 10:20:49.475: ERROR/AndroidRuntime(19089):     at com.angsan.TelephonyManager.TTS.access$0(TTS.java:43)
06-24 10:20:49.475: ERROR/AndroidRuntime(19089):     at com.angsan.TelephonyManager.TTS$1.onInit(TTS.java:30)
06-24 10:20:49.475: ERROR/AndroidRuntime(19089):     at android.speech.tts.TextToSpeech$1.onServiceConnected(TextToSpeech.java:451)
06-24 10:20:49.475: ERROR/AndroidRuntime(19089):     at android.app.ActivityThread$PackageInfo$ServiceDispatcher.doConnected(ActivityThread.java:1247)
...etc
la classe TTS che ho implemetato è:
Codice (Java): [Seleziona]
public class TTS {
       
        private TextToSpeech ttsEngine = null;
        private String text; private String num;
        private boolean off=false;
        boolean sms;

        public TTS(Context ctx, String t, String number, boolean message){
                text=t;
                num=CallFilter.instance(ctx).searchName(number);
                sms=message;
                try{
                ttsEngine = new TextToSpeech(ctx,
                                new TextToSpeech.OnInitListener() {
                                        public void onInit(int status) {
                                                if (status == TextToSpeech.SUCCESS) {
                                                        speak();
                                                }
                                        }
                                });}catch(Exception e){
                                        Log.e("TTS", e.getMessage());
                                }
                ttsEngine.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener() {
                        public void onUtteranceCompleted(String utteranceId) {
                                shutdown();                    
                        }
                });
        }
       
        private void speak() {
                if(!sms){
                        if (num.length() == 0)
                                num="Sconosciuto";
                        // Imposta pitch (da 0.5 a 2.0).
                        ttsEngine.setPitch((float) 1.1);
                        // Imposta rate (da 0.5 a 2.0).
                        ttsEngine.setSpeechRate((float) 1.1);
                        // Pronuncia la frase.
                        ttsEngine.speak(text+" "+num, TextToSpeech.QUEUE_ADD, null);
                        }else{
                                //it's a sms text
                                ttsEngine.speak(text, TextToSpeech.QUEUE_ADD, null);
                                //TODO
                        }
                }
        public void shutdown(){
                if(!off) {ttsEngine.shutdown(); off=true;}
        }
potete aiutarmi? perchè nn capisco veramente il perchè di quest'errore

Offline Nicola_D

  • 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:NullPointerException del tts alla sua seconda chiamata
« Risposta #1 il: 24 Giugno 2011, 11:10:34 CEST »
0
hai messo il codice che controlla che il TTS sia installato sul cellulare?
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 duky2003

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    LG P500
  • Sistema operativo:
    Windows xp, Ubuntu 10.10
Re:NullPointerException del tts alla sua seconda chiamata
« Risposta #2 il: 24 Giugno 2011, 11:17:27 CEST »
0
si faccio il controllo appena faccio partire il servizio... poco fà però ho trovato questo esempio di codice fatto da google Android example -  TextToSpeech.java - error, illegalstateexception, nullpointerexception, remoteexception, string, success
che comunque controlla con un try catch se c'è un nullPointerException, e se lo trova reinizializza il tutto. Ora lo sto provando...mi sà che, se questo esempio di codice risolve il problema, il TTS ogni tanto per motivi misteriosi può non parte in modo corretto per questo si reinizializza...appena finisco questa prova vi farò sapere...

Offline Nicola_D

  • 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:NullPointerException del tts alla sua seconda chiamata
« Risposta #3 il: 24 Giugno 2011, 11:19:36 CEST »
0
comunque alla prima chiamata di speak bisognerebbe fare il QUEUE_FLUSH o un nome simile (non ricordo), l'add va fatto dalla seconda chiamata in poi
PS: Forse hai il null pointerException perchè chiami il shutdown dopo ogni frase parlata!
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 duky2003

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    LG P500
  • Sistema operativo:
    Windows xp, Ubuntu 10.10
Re:NullPointerException del tts alla sua seconda chiamata
« Risposta #4 il: 24 Giugno 2011, 11:28:33 CEST »
0
Ora vedo, ma comunque quando mi richiamo il TTS mi creo ogni volta un nuovo oggetto richiamandomi la mia classe in questo modo
Codice (Java): [Seleziona]
new TTS(this, "Leggi messaggio da ",number,false);senza assegnargli variabili, praticamente ho voluto fare un oggetto usa e getta

Ho provato il codice di esempio sopra citato, e funziona. Secondo me il service del TTS della prima chiamata non si chiudeva completamente e quindi la seconda chiamata falliva... quindi con un try catch che reinizializza il tutto quando ha quest'eccezione sembra funziona  ;-)
« Ultima modifica: 24 Giugno 2011, 11:45:39 CEST da duky2003 »