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

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

方法覆盖

规则:重写方法(子类的方法(可以引发任何未经检查的异常,而不管重写的方法(基类的方法(是否引发异常。但是,重写方法不应引发新的或比重写方法声明的异常更广泛的已检查异常。重写方法可以引发那些已检查的异常,这些异常的范围小于重写方法中声明的异常。

在您的情况下onClick()是来自View.OnClickListener的覆盖方法。由于View.OnClickListener中的onClick()不会在父类/接口中抛出任何异常,因此您不能抛出选中的异常。

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

除此之外,onClick()throws似乎没有任何用处.throws用于在调用链中传递异常。由于onClick()是事件侦听器,因此抛出异常是没有用的。 您应该使用try/catch并在onClick()本身中处理异常。

根据 API,View.OnClickListener接口定义了一个不会引发任何检查异常的方法onClick(View view)

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

或者,尽管不建议这样做,但可以引发未经检查的异常。不过,我的猜测是,API 不会对此感到满意。最好选择第一个选项。

最新更新