【发布时间】:2012-03-29 16:41:59
【问题描述】:
我在 android 开发者控制台中收到一个空指针异常报告。我需要一些关于这里可能是什么问题的建议,堆栈跟踪是这样的
java.lang.NullPointerException
at com.myfreeapp.workers.Speaker.onInit(Speaker.java:57)
at android.speech.tts.TextToSpeech$1.onServiceConnected(TextToSpeech.java:451)
at android.app.ActivityThread$PackageInfo$ServiceDispatcher.doConnected(ActivityThread.java:1247)
at android.app.ActivityThread$PackageInfo$ServiceDispatcher$RunConnection.run(ActivityThread.java:1264)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4668)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
at dalvik.system.NativeStart.main(Native Method)
我的应用中的相关代码sn-p是
public Speaker(final Context context, final Settings settings)
{
this.settings = settings;
params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM));
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "myfreeapps");
tts= new TextToSpeech(context, this);
Utils.log(TAG, "Created TextToSpeech..");
}
@Override
public void onInit(final int status)
{
Utils.log(TAG, "TTS onInit..");
//below is line 57 mentioned in the stack trace
tts.setOnUtteranceCompletedListener(new SpeechFinishedListener());
tts.setLanguage(Locale.getDefault());
tts.setSpeechRate(settings.getSpeed());
tts.setPitch(settings.getPitch());
ready = true;
}
请首先我需要清楚究竟什么是空.. 第 57 行指向变量 tts 的堆栈跟踪是否为 null..?
还是TextToSpeech方法setOnUtteranceCompletedListener内部发生空指针异常?
扬声器实例是在粘性服务的主线程上创建的,当我调试我的代码时,来自 TextToSpeech 的回调也返回到同一线程上。..
我不明白变量 tts 怎么可能是 null ???
顺便说一下,这个问题对我来说是无法重现的。我在开发者控制台上多次报告了这个堆栈跟踪。
请指教,
【问题讨论】:
-
这是您在构造函数中初始化 TextToSpeech 对象而不是在 onInit 中初始化的原因吗?
-
好吧,onInit 是作为创建 TextToSpeech(context, this); 的结果而被调用的。 TextToSpeech 构造函数的第二个参数是 OnInitListener 的实现,它具有 onInit 方法。语音类正在实现 OnInitListener 接口。