2013-06-23 3 views
-2

내 응용 프로그램에서 프래그먼트 및 뷰 페이지를 사용 중입니다. 나는 활동을 확장하지만 레이아웃이없는 스피치 클래스와는 별도의 텍스트를 가지고있다. FragmentAdapter 클래스에서이 클래스를 인스턴스화했습니다.이 클래스는 현재 화면의 활동에 따라 함수를 호출합니다. 그러나 텍스트를 음성 생성자로 인해 응용 프로그램이 강제 종료되는 결과가 발생합니다. 나는 getApplicationContext()와 className.this를 모두 사용해 왔지만 여전히 응용 프로그램을 충돌 시키더라도 음성 생성자에 대한 텍스트에서 범인이 컨텍스트라는 것을 알아 냈습니다. 코드는 다음과 같습니다.app에 충돌하는 텍스트 생성자 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); 
} 

안부에 (I 음성 클래스에 텍스트를 인스턴스화 한)

답변

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"); 
      ... 
     } 
    }); 
} 

을하는 방식으로 규칙을 따라하려고, 자바 클래스는 대문자로 시작해야합니다. 또한 활동이기 때문에 마지막에 Activity을 추가해야합니다 (TextToSpeechActivity은 좋은 이름 임). 나는 당신의 코드를보고 약간 혼란 스러웠다.

+0

이미 그렇게했습니다. 여전히 앱 크래시. – user2498079

+0

FragmentAdapter 확장 클래스에서 클래스를 인스턴스화합니다. 위 코드를 onCreate에 넣으면 startActivity를 사용하여 액티비티를 시작해야하는데, 비 액티비티 클래스에서는 할 수 없습니다. – user2498079

+0

그래서 'Activity'에서 확장되었지만 활동이 아닙니다. 'startActivity()'로 시작하지 않으면 컨텍스트를 얻기 위해'Activity'를 확장하면됩니다. 디자인을 재고해야합니다. – Dalmas

관련 문제