Java 传递上下文时为Null
在我的对话框中,我有一个可以单击的按钮(类:Java 传递上下文时为Null,java,android,Java,Android,在我的对话框中,我有一个可以单击的按钮(类:dialog)。单击该按钮后,将调用方法customTts()(位于MainActivity类中): @RequiresApi(api=Build.VERSION\u CODES.KITKAT) public void CustomTts(字符串输入)引发异常{ Tts Tts=新Tts(MainActivity.this,_mediaPlayer,barTop,barBottom); 说“你好!”; } 我得到的错误是: W/System.err:
dialog
)。单击该按钮后,将调用方法customTts()
(位于MainActivity
类中):
@RequiresApi(api=Build.VERSION\u CODES.KITKAT)
public void CustomTts(字符串输入)引发异常{
Tts Tts=新Tts(MainActivity.this,_mediaPlayer,barTop,barBottom);
说“你好!”;
}
我得到的错误是:
W/System.err:java.lang.NullPointerException:尝试调用
虚拟方法“android.content.res.Resources”
空对象引用上的android.content.Context.getResources()
Tts()
的第一个参数需要Context
。看起来像是MainActivity。这个返回null
公共类Tts扩展main活动{
公共语境;
私人最终MediaPlayer _MediaPlayer;
私人CopyBarVisualizer_barTop;
私人CopyBarVisualizer_barBottom;
公共Tts(上下文上下文、媒体播放器、BarVisualizer、BarVisualizer、barBottom){
this.context=上下文;
这个.\u mediaPlayer=\u mediaPlayer;
这个._barTop=(CopyBarVisualizer)_barTop;
这个._barBottom=(CopyBarVisualizer)_barBottom;
}
@SuppressLint({“NewApi”、“ResourceType”、“UseCompatingLoadingForColorStateList”})
@RequiresApi(api=Build.VERSION\u CODES.KITKAT)
公共void say(字符串文本)引发异常{
InputStream stream=context.getResources().openRawResource(R.raw.credential);//R.raw.credential是credential.json
GoogleCredentials=GoogleCredentials.fromStream(流);
TextToSpeechSettings TextToSpeechSettings=
TextToSpeechSettings.newBuilder()
.setCredentialsProvider(
FixedCredentialsProvider.create(凭据)
).build();
在这种情况下,我如何传递上下文?我需要做的是将对话框类的getActivity()
传递到MainActivity()
。我可以通过一个接口和onAttach()
:
公共接口OnInputListener{
void customTts(字符串输入、活动);
}
公共OnInputListener OnInputListener;
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
试一试{
onInputListener=(onInputListener)getActivity();
}
catch(ClassCastException e){
Log.e(标记“onAttach:ClassCastException:”+e.getMessage());
}
}
这是我按下按钮时使用的:
onInputListener.customTts(输入,getActivity());
在MainActivity类中,我将customTts()
方法更改为:
@RequiresApi(api=Build.VERSION\u CODES.KITKAT)
@凌驾
公共void customTts(字符串输入、活动){
Tts Tts=新Tts(活动、mediaPlayer、barTop、barBottom);
试一试{
tts.say(输入);
}捕获(例外e){
e、 printStackTrace();
}
}
你能包括你从何处调用此消息以及NPE发生在何处吗?这很奇怪,但尝试使用getApplicationContext()
@Zain这似乎是一种忽略实际问题的解决方法。@HenryTwist是的。。我们需要看更多的代码为什么“Tts扩展MainActivity”?需要这样做吗?