2012-02-11 20 views
0

私はそれにオーディオインターフェイスを追加する前によく働いているアンドロイドアプリケーションを作成しました。 ttsチュートリアルのために私は続いたthis linkandroid applicationのtts

チュートリアルのコードはうまくいきます。私のコードで私はそれを使用してNull pointer exception at tts.speak(s, TextToSpeech.QUEUE_FLUSH, null);行を得ています。私はこの問題を解決するために私を助けてください。私は問題が文字列sではないと確信しています、私はそれをチェックしました。あなたがフィニッシュを()を呼び出す前に

public class TimerActivity extends Activity implements OnInitListener { 

    /** Called when the activity is first created. */ 

    Handler mhandler = new Handler(); 

    Button mybtn[] = new Button[12]; 

    Button select_btn, home_btn; 

    EditText et; 

    Bundle b; 

    int var = 0; 

    private int MY_DATA_CHECKCODE = 0; 

    private TextToSpeech tts; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     select_btn = (Button) findViewById(R.id.ok); 
     home_btn = (Button) findViewById(R.id.home); 
     et = (EditText) findViewById(R.id.entry); 
     et.setText("", TextView.BufferType.EDITABLE); 
     b = new Bundle(); 

     for (int i = 0; i < mybtn.length; i++) { 
      String btnid = "btn" + i; 
      int resid = getResources().getIdentifier(btnid, "id", 
        getPackageName()); 
      mybtn[i] = (Button) findViewById(resid); 
     } 

     mybtn[var].requestFocus(); 
     Intent checkin = new Intent(); 
     checkin.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
     startActivityForResult(checkin, MY_DATA_CHECKCODE); 

     select_btn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       Button bt; 
       bt = (Button) getCurrentFocus(); 

       if (bt.equals(mybtn[10])) { 
        String s = et.getText().toString(); 
        int l = s.length(); 

        if (l > 0) { 
         String t; 
         if (l > 1) 
          t = s.substring(0, l - 1); 
         else 
          t = ""; 

         et.setText(t, TextView.BufferType.EDITABLE); 
        } 

       } 

       else if (bt.equals(mybtn[11])) { 

        Intent in = new Intent(TimerActivity.this, Calling.class); 
        String s = et.getText().toString().trim(); 
        b.putString("number", s); 
        in.putExtras(b); 
        if (s != null && s.length() > 0) { 
         tts.speak(s, TextToSpeech.QUEUE_ADD, null); 
         startActivity(in); 
         finish(); 
        } 

        // else say enter a valid number 
       } 
       // CharSequence cs= bt.getText(); 
       // if(cs.equals(0)) 
       // et.setText("121"); 
       // else 
       // if(!(bt.equals(0))) 
       else 
        et.setText(et.getText() + "" + bt.getText(), 
          TextView.BufferType.EDITABLE); 
       // else 
       // et.setText("google",TextView.BufferType.EDITABLE); 
      } 
     }); 

     home_btn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 

       finish(); 
      } 
     }); 

     final Runnable mUpdateTimeTask = new Runnable() { 
      public void run() { 
       // final long start= System.currentTimeMillis(); 
       // mhandler.removeCallbacks(this); 
       // et.setText("i am the man"); 

       mybtn[var].requestFocus(); 
       String s = mybtn[var].getText().toString(); 
       s = "abcd"; 
       if (s != null && s.length() > 0) 
        tts.speak(s, TextToSpeech.QUEUE_FLUSH, null); 
       var = (var + 1) % 12; 
       // mybtn[var].requestFocus(); 

       mhandler.postDelayed(this, 2000); 

      } 
     }; 

     mhandler.postDelayed(mUpdateTimeTask, 100); 

    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == MY_DATA_CHECKCODE) { 
      if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
       // success, create the TTS instance 
       tts = new TextToSpeech(this, this); 
       tts.setLanguage(Locale.US); 
      } else { 
       // missing data, install it 
       Intent installIntent = new Intent(); 
       installIntent 
         .setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
       startActivity(installIntent); 
      } 
     } 

    } 

    @Override 
    public void onInit(int status) { 
     // TODO Auto-generated method stub 

     if (status == TextToSpeech.SUCCESS) { 
      Toast.makeText(TimerActivity.this, 
        "Text-To-Speech engine is initialized", Toast.LENGTH_LONG) 
        .show(); 
     } else if (status == TextToSpeech.ERROR) { 
      Toast.makeText(TimerActivity.this, 
        "Error occurred while initializing Text-To-Speech engine", 
        Toast.LENGTH_LONG).show(); 
     } 

    } 

} 
+0

ttsを確認しましたか?おそらく、onActivityResult()の初期化はまだ完了しておらず、ttsはまだnullです。 – Stefan

+0

私は最初にtts = nullを使用し、tts.equals(0)を使用してnullであるかどうかをチェックしようとしました。そのチェック中もNUllポインタ例外が返されています。何がこれのための修正である可能性があります。 –

+0

ttsがnullかどうかをチェックするには、tts.equals(0)を使用しないでください。最初のnullと0は異なるオブジェクト(と型!)で、2番目がttsがnullの場合、equals()を呼び出すことはできません。次の式を使用します。tts == null しかし、あなたの実験では、ttsがnullであることが示唆されています。 – Stefan

答えて

0

は、あなたが任意のより多くのそれを使用していないアンドロイドを伝えるために()tts.shutdown呼び出す必要があります。あなたはおそらくonDestroy()を呼び出すべきです。これを行うと、アプリケーションが終了するとスピーカーが停止します。