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();
}
}
}
ttsを確認しましたか?おそらく、onActivityResult()の初期化はまだ完了しておらず、ttsはまだnullです。 – Stefan
私は最初にtts = nullを使用し、tts.equals(0)を使用してnullであるかどうかをチェックしようとしました。そのチェック中もNUllポインタ例外が返されています。何がこれのための修正である可能性があります。 –
ttsがnullかどうかをチェックするには、tts.equals(0)を使用しないでください。最初のnullと0は異なるオブジェクト(と型!)で、2番目がttsがnullの場合、equals()を呼び出すことはできません。次の式を使用します。tts == null しかし、あなたの実験では、ttsがnullであることが示唆されています。 – Stefan