Android:Uri抛出NoSuchFieldException

时间:2015-12-08 18:05:08

标签: java android

使用以下方法,我会播放列表中的视频。

videoItem.setVideoPath(filePaths.get(position));
videoItem.setClickable(true);
videoItem.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        player.playVideo(videoItem);
        return true;
    }
});

videoItem变量是VideoView类的一个实例,player变量及其方法来自自定义VideoPlayer类。

这是VideoPlayer类。

public class VideoPlayer {
    private Context context;
    private Uri uri;
    private boolean isVideoPlaying = false;

    public VideoPlayer(Context context) {
        this.context = context;
    }

    public void getVideoUri(VideoView video) {
        try {
            Field field = VideoView.class.getDeclaredField("uri");
            field.setAccessible(true);
            uri = (Uri) field.get(video);
        } catch (Exception e) {
            Toast.makeText(context, "Exception caught: " + e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }

    public void playVideo(VideoView video) {
        getVideoUri(video);
        MediaController mediaController = new MediaController(context);
        mediaController.setAnchorView(video);
        mediaController.setMediaPlayer(video);
        video.setMediaController(mediaController);
        video.setVideoURI(uri);
        video.start();
        isVideoPlaying = true;
    }
}

当我点按视频视图时,它会开始播放。那不是问题。但同时还显示了捕获异常时抛出的Toast消息。为什么代码中会发生异常?

1 个答案:

答案 0 :(得分:0)

您的错误说"uri"不是VideoView类的字段,请检查VideoView类并更正您尝试访问的字段的名称。