java - 不能在 OnClickListener 上抛出 IOException
问题描述
我正在尝试制作一个应用内录音机,但由于与 OnClick 方法发生冲突,我由于某种原因无法抛出 IOException。
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) throws IOException {
MediaPlayer m = new MediaPlayer();
m.setDataSource(outputFile);
m.prepare();
m.start();
Toast.makeText(getContext(), "Playing audio", Toast.LENGTH_SHORT).show();
}
});
throws IOException 部分对于您稍后可以看到的行是必需的,但它似乎会导致某种冲突。整个事情都在 onCreateView 方法中,并且在片段中,如果这是相关信息的话。非常感谢任何帮助!
解决方案
方法覆盖
规则:被覆盖的方法(子类的方法)可以抛出任何未经检查的异常,而不管被覆盖的方法(基类的方法)是否抛出异常。但是,重写方法不应抛出新的或比重写方法声明的异常更广泛的检查异常。覆盖方法可以抛出那些检查的异常,这些异常的范围小于覆盖方法中声明的异常。
在您的情况下onClick()
,是来自View.OnClickListener
. 由于onClick()
inView.OnClickListener
不会在父类/接口中抛出任何异常,因此您不能抛出已检查的 Exception 。
IOException
是一个检查异常。你可以尝试抛出ArrayIndexOutOfBoundsException
它不会给出编译时错误。
除此之外似乎没有任何用处throws
。用于在调用链中传递异常。由于是事件侦听器,因此没有用抛出异常。您应该在其内部使用和处理 Exception 。onClick()
throws
onClick()
try/catch
onClick()
推荐阅读
- jquery - 无法在jquery中使用动态值更改输入宽度
- typescript - 如何在 Nest 中使用带有 TypeORM 的内存数据库
- javascript - 如何在 spa 应用程序中处理多种语言的多种字体
- git - 包含 git 子模块和父存储库的单个目录
- mapbox - 将 Mapbox-GL 导出到视频
- android - SearchView search_plate 未扩展到全宽
- php - HTACCESS WordPress 问题
- python - 从 Keras 的生成器中获取 x_test、y_test?
- ios - 如何从本地图像路径加载图像 Ios Swift 4
- java - json解析错误