Java Can';t在OnClickListener上引发IOException

Java Can';t在OnClickListener上引发IOException,java,android,Java,Android,我正在尝试制作一个应用内音频记录器,但由于某些原因,我无法抛出IOException,因为与OnClick方法冲突 play.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) throws IOException { MediaPlayer m = new MediaPlayer();

我正在尝试制作一个应用内音频记录器,但由于某些原因,我无法抛出IOException,因为与OnClick方法冲突

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();
        }
    });

抛出IOException部分对于稍后可以看到的行是必需的,但它似乎会导致某种冲突。整个过程都在onCreateView方法中,如果这是相关信息的话,它也在片段中。非常感谢您的帮助

根据API,
View.OnClickListener
接口定义了一个方法
onClick(视图视图)
,该方法不会抛出任何选中的异常

因此,您不能抛出异常。时期最好的选择是捕获此异常并对其进行处理。可能用标志标记案例,甚至存储异常


或者,尽管不推荐,您也可以抛出未经检查的异常。不过,我的猜测是,API不会对此感到高兴。最好使用第一个选项。

方法覆盖

规则:重写方法(子类的方法)可以抛出任何未检查的异常,无论重写方法(基类的方法)是否抛出异常。但是,重写方法不应抛出新的或比重写方法声明的范围更广的已检查异常。重写方法可以抛出那些已检查的异常,这些异常的作用域小于重写方法中声明的异常

在您的例子中,
onClick()
是来自
View.OnClickListener
的重写方法。由于
视图中的
onClick()
。OnClickListener
不会在父类/接口中引发任何异常,因此无法引发选中的异常

IOException
是选中的异常。您可以尝试抛出
ArrayIndexOutOfBoundsException
它不会给出编译时错误

除此之外,从
onClick()抛出
似乎没有任何用处<代码>抛出
用于在调用链中传递异常。由于
onClick()
是一个事件侦听器,因此没有必要抛出异常。您应该使用
try/catch
并在
onClick()本身中处理异常。

尝试使用
Thread.sleep()脚本可能需要等待几毫秒才能执行下一个操作