我试图制作应用内录音机,但由于与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();
}
});
抛出IOException部分对于稍后可以看到的行是必需的,但它似乎会导致某种冲突。整个事情都在onCreateView方法中,如果是相关信息,它就在片段内。任何帮助非常感谢!
答案 0 :(得分:2)
方法覆盖
规则:重写方法(子类的方法)可以抛出任何未经检查的异常,无论被覆盖的方法(基类的方法)是否抛出异常。但是,重写方法不应抛出新的或更宽的已检查异常,而不是重写方法声明的异常。重写方法可以抛出那些已检查的异常,这些异常的范围小于重写方法中声明的异常。
在您的情况下,onClick()
是来自View.OnClickListener
的重写方法。由于onClick()
中的View.OnClickListener
不会在父类/接口中抛出任何异常,因此您不能抛出已检查的异常。
IOException
是Checked Exception。您可以尝试抛出ArrayIndexOutOfBoundsException
它不会给出编译时错误。
除了来自throws
的{{1}}似乎没有任何用处。 onClick()
用于在调用链中传递Exception。由于throws
是一个事件监听器,因此不会抛出异常。您应该使用onClick()
并在try/catch
内部处理Exception。
答案 1 :(得分:1)
根据API,View.OnClickListener
接口定义了一个方法onClick(View view)
,它不会抛出任何已检查的异常。
因此,您不能抛出异常。期。最好的选择是捕获此异常并使用它执行某些操作。也许用标志标记案例,甚至存储例外。
或者,虽然不推荐,但您可以抛出未经检查的异常。我的猜测是,API不会对它感到高兴。最好选择第一个选项。