Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 传递上下文时为Null_Java_Android - Fatal编程技术网

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”?需要这样做吗?