TextToSpeech.setEngineByPackageName()引发NullPointerException异常 [英] TextToSpeech.setEngineByPackageName() triggers NullPointerException

查看:331
本文介绍了TextToSpeech.setEngineByPackageName()引发NullPointerException异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的活动的的OnInit()包含通话TextToSpeech.setEngineByPackageName()

  tts = new TextToSpeech(this, this);
  tts.setEngineByPackageName("com.ivona.tts.voicebeta.eng.usa.kendra");

它的Andr​​oid 2.2.2设备上,但在Android 2.3.4设备上它产生一个NullPointerException异常,具有以下堆栈跟踪:

It works on an Android 2.2.2 device, but on an Android 2.3.4 device it produced a NullPointerException, with the following stack trace:

 E/TextToSpeech.java - setEngineByPackageName(3423): NullPointerException
 W/System.err(3423): java.lang.NullPointerException
 W/System.err(3423):    at android.os.Parcel.readException(Parcel.java:1328)
 W/System.err(3423):    at android.os.Parcel.readException(Parcel.java:1276)
 W/System.err(3423):    at android.speech.tts.ITts$Stub$Proxy.setEngineByPackageName(ITts.java:654)
 W/System.err(3423):    at android.speech.tts.TextToSpeech.setEngineByPackageName(TextToSpeech.java:1356)

由于我提供了一个硬codeD字符串参数,我知道这个参数是不是出了什么导致NullPointerException异常。

Since I am providing a hard-coded string parameter, I know that the parameter isn't what's causing the NullPointerException.

我也知道, setEngineByPackageName()是德precated但这只是因为14 API,所以这不能成为理由。

I also know that setEngineByPackageName() is deprecated but that's only since API 14, so this couldn't be the reason.

任何想法,这可能是造成这个NullPointerException异常?

Any idea what could be causing this NullPointerException?

修改:我不会一直关注的为什么,如果这并未导致无尽的轰炸:

EDIT: I wouldn't have been concerned with the "why" if this didn't result in an endless bombardment of:

I/TextToSpeech.java(3652): initTts() successfully bound to service

随后调用的OnInit()(由系统,而不是我的code)。

Followed by calls to onInit() (by the system, not by my code).

我的希望是,如果我underderstand为什么发生这种情况,我可以停止的OnInit的轰击()和从错误中正常恢复。

My hope is that if I underderstand why this is happening, I can stop the bombardment of onInit()s and recover gracefully from the error.

推荐答案

是TTS引擎你引用安装了2.3.4设备上?如果是,它可能是一个平台错误。

Is the TTS engine you are referencing installed on the 2.3.4 device? If it is, it might be a platform bug.

编辑:
不记得是什么结果我得到了我这样做的时候,但调用 setEngineByPackageName()时,包不存在是不是一个好主意。检查是否安装了它,不要尝试使用它,如果它不是。是这样的:

Don't remember what results I got when I did this, but calling setEngineByPackageName() when the package doesn't exists is not a good idea. Check if it is installed and don't try to use it if it's not. Something like:

boolean isPackageInstalled(String packageName) {
  PackageManager pm = context.getPackageManager();
  try {
    PackageInfo pi = pm.getPackageInfo(packageName, 0);

    return pi != null;
  } catch (NameNotFoundException e) {
    return false;
  }
}

这篇关于TextToSpeech.setEngineByPackageName()引发NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆