繁体   English   中英

无法在OnClickListener上抛出IOException

[英]Can't throw IOException on OnClickListener

我正在尝试制作应用内录音机,但由于与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是Checked Exception。 你可以尝试抛出ArrayIndexOutOfBoundsException它不会给出编译时错误。

除了onClick() throws似乎没有任何用处。 throws用于在调用链中传递Exception。 由于onClick()是一个事件监听器,因此不会抛出异常。 你应该使用try/catch并在onClick()内部处理Exception。

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

因此,您不能抛出异常。 期。 最好的选择是捕获此异常并使用它执行某些操作。 也许用标志标记案例,甚至存储异常。

或者,虽然不推荐,但您可以抛出未经检查的异常。 我的猜测是,API不会对此感到高兴。 最好选择第一个选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM