2013-06-23 58 views
-2

在我的應用程序中,我正在使用片段和viewpager。我有一個單獨的文本到擴展活動但沒有佈局的語音類。我已經在FragmentAdapter類中實例化了這個類,根據當前屏幕上的活動調用這個函數。然而,文本到語音構造函數正在導致應用程序崩潰導致強制關閉。我已經找到了文本中的罪魁禍首構造函數是上下文,儘管我已經使用了getApplicationContext()和className.this,但它仍然使應用程序崩潰。這裏是代碼:文本到語音構造器崩潰的應用程序android

public class textToSpeech extends Activity{ 

TextToSpeech tts=null; 

public textToSpeech() 
{ 
    Log.d("text to speech", "constructor"); 

    tts = new TextToSpeech(textToSpeech.this , new TextToSpeech.OnInitListener() { 

     @Override 
     public void onInit(int status) { 

      Log.d("text to speech", "init"); 

      if(status != TextToSpeech.ERROR) 
      { 
       Log.d("text to speech", "condition"); 

       tts.setPitch(1.1f); 

       tts.setSpeechRate(0.4f); 

       tts.setLanguage(Locale.US); 
      } 

     } 
    }); 
} 

請指導我解決這個問題。

我已經使用startActivity()開始了文本到語音活動,但是當我將文本中的方法調用到語音類時,仍然收到NullPointerException。 (我實例化文本到語音類)

tts.SpeakText("hello world"); // in fragmentPagerAdapter exception class 

在文本到語音類

public void SpeakText (String text) 
{ 
    Log.d("text to speech", "speaking"); 

    if(text!=null) 

      tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
} 

問候

回答

1

這是因爲你把你的代碼在活動構造,但活動仍未初始化。將你的代碼onCreate,它應該工作:

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    ... 
    tts = new TextToSpeech(textToSpeech.this , new TextToSpeech.OnInitListener() { 

     @Override 
     public void onInit(int status) { 
      Log.d("text to speech", "init"); 
      ... 
     } 
    }); 
} 

順便說一句,儘量依照慣例,在Java類應以大寫字母開頭。這也是一項活動,所以你應該在最後加上ActivityTextToSpeechActivity將是一個好名字)。通過查看你的代碼,我有點困惑。

+0

已經做到了。應用程序仍然存在。 – user2498079

+0

我在FragmentAdapter擴展類中實例化上面的類。如果我把上面的代碼放在onCreate中,我將不得不用startActivity來開始這個活動,而在非活動類中我不能這樣做。 – user2498079

+0

所以它從'活動'延伸,但它不是一項活動?如果不是用'startActivity()'開始,那麼從'Activity'擴展來獲取上下文不起作用。你必須重新考慮你的設計。 – Dalmas