当我点击按钮时,我编写了一个会在EditText中输入单词的应用程序.但是当我点击按钮时,应用程序因为TTS的speck()方法中的NoSuchMethodError而崩溃.代码在虚拟设备上运行时没有错误Android版本5.1,但破坏虚拟设备与Android版本4.4.2和Xperia Z 4.4.4.帮帮我吧.这是我的活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
isTTSready = true;
int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA
| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(getApplicationContext(), "Language is missing",
Toast.LENGTH_LONG).show();
}
}
}
});
text = (EditText) findViewById(R.id.text);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isTTSready) {
String readIt = text.getText().toString();
tts.speak(readIt, TextToSpeech.QUEUE_FLUSH, null, null);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是错误日志
05-31 12:50:26.970: E/AndroidRuntime(2312): FATAL EXCEPTION: main
05-31 12:50:26.970: E/AndroidRuntime(2312): Process: com.example.tts_test, PID: 2312
05-31 12:50:26.970: E/AndroidRuntime(2312): java.lang.NoSuchMethodError: android.speech.tts.TextToSpeech.speak
05-31 12:50:26.970: E/AndroidRuntime(2312): at com.example.tts_test.MainActivity$2.onClick(MainActivity.java:51)
05-31 12:50:26.970: E/AndroidRuntime(2312): at android.view.View.performClick(View.java:4438)
05-31 12:50:26.970: E/AndroidRuntime(2312): at android.view.View$PerformClick.run(View.java:18422)
05-31 12:50:26.970: E/AndroidRuntime(2312): at android.os.Handler.handleCallback(Handler.java:733)
05-31 12:50:26.970: E/AndroidRuntime(2312): at android.os.Handler.dispatchMessage(Handler.java:95)
05-31 12:50:26.970: E/AndroidRuntime(2312): at android.os.Looper.loop(Looper.java:136)
05-31 12:50:26.970: E/AndroidRuntime(2312): at android.app.ActivityThread.main(ActivityThread.java:5017)
05-31 12:50:26.970: E/AndroidRuntime(2312): at java.lang.reflect.Method.invokeNative(Native Method)
05-31 12:50:26.970: E/AndroidRuntime(2312): at java.lang.reflect.Method.invoke(Method.java:515)
05-31 12:50:26.970: E/AndroidRuntime(2312): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-31 12:50:26.970: E/AndroidRuntime(2312): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-31 12:50:26.970: E/AndroidRuntime(2312): at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
对不起,我的英语不好.如果这篇文章让你感到不安,我很抱歉,这是我的第一个问题.
您的代码崩溃,因为您使用
public int speak (CharSequence text, int queueMode, Bundle params, String utteranceId)
Run Code Online (Sandbox Code Playgroud)
正如您在文档中看到的那样,它在API Level 21中添加.
对于低于21的API,您应该使用
public int speak (String text, int queueMode, HashMap<String, String> params)
Run Code Online (Sandbox Code Playgroud)
将您的代码更改为以下内容:
if (isTTSready) {
String readIt = text.getText().toString();
if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
tts.speak(readIt, TextToSpeech.QUEUE_FLUSH, null, null);
} else {
tts.speak(readIt, TextToSpeech.QUEUE_FLUSH, null);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1350 次 |
| 最近记录: |