Android VideoView 活动崩溃

Posted

技术标签:

【中文标题】Android VideoView 活动崩溃【英文标题】:Android VideoView Activity crashing 【发布时间】:2016-07-06 23:36:54 【问题描述】:

我使用此处的教程 (https://examples.javacodegeeks.com/android/android-videoview-example/) 在我的应用程序中构建了一个 videoview 活动,尽管它在打开时一直崩溃。我想不通以挽救我的生命。我已经检查了这里的其他帖子,没有一个建议有

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.res.Configuration;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.widget.MediaController;
import android.widget.VideoView;

public class DemoActivity extends AppCompatActivity 

    private VideoView myVideoView;
    private int position = 0;
    private ProgressDialog progressDialog;
    private MediaController mediaControls;


    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_quote);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // set the main layout of the activity
        setContentView(R.layout.activity_main);

        //set the media controller buttons
        if (mediaControls == null) 
            mediaControls = new MediaController(DemoActivity.this);
        

        //initialize the VideoView
        myVideoView = (VideoView) findViewById(R.id.video_view);

        // create a progress bar while the video file is loading
        progressDialog = new ProgressDialog(DemoActivity.this);
        // set a title for the progress bar
        progressDialog.setTitle("JavaCodeGeeks Android Video View Example");
        // set a message for the progress bar
        progressDialog.setMessage("Loading...");
        //set the progress bar not cancelable on users' touch
        progressDialog.setCancelable(false);
        // show the progress bar
        progressDialog.show();

        try 
            //set the media controller in the VideoView
            myVideoView.setMediaController(mediaControls);

            //set the uri of the video to be played
            myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.demo));

         catch (Exception e) 
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        

        myVideoView.requestFocus();
        //we also set an setOnPreparedListener in order to know when the video file is ready for playback
        myVideoView.setOnPreparedListener(new OnPreparedListener() 

            public void onPrepared(MediaPlayer mediaPlayer) 
                // close the progress bar and play the video
                progressDialog.dismiss();
                //if we have a position on savedInstanceState, the video playback should start from here
                myVideoView.seekTo(position);
                if (position == 0) 
                    myVideoView.start();
                 else 
                    //if we come from a resumed activity, video playback will be paused
                    myVideoView.pause();
                
            
        );

    

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) 
        super.onSaveInstanceState(savedInstanceState);
        //we use onSaveInstanceState in order to store the video playback position for orientation change
        savedInstanceState.putInt("Position", myVideoView.getCurrentPosition());
        myVideoView.pause();
    

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) 
        super.onRestoreInstanceState(savedInstanceState);
        //we use onRestoreInstanceState in order to play the video playback from the stored position
        position = savedInstanceState.getInt("Position");
        myVideoView.seekTo(position);
    

【问题讨论】:

你能把你得到的错误贴出来吗 不确定这是否有帮助,但它是我能看到的唯一指出某些特定内容的东西...原因:java.lang.NullPointerException:尝试调用虚拟方法'boolean android.widget.VideoView .requestFocus()' 在空对象引用上 这实际上意味着在您的 main_activity lauout 中 VideoView (R.id.video_view) 不存在。正如@phongvan 在下面的回答中,请为其中包含 VideoView 的活动设置一种布局。粘贴两个布局的内容。 【参考方案1】:

在您的代码中有两个 setContentView() 用于两个布局。这就是你错误的原因。您需要 merge 两个布局,并确保 VideoView 在该视图上可用。

【讨论】:

做到了。这是几个方面的疏忽。我删除了第二个 setContentView 并将第一个更改为 content_demo 它应该是。 activity_quote 不包含我的视频视图。哦!感谢您指出了这一点。非常感谢。

以上是关于Android VideoView 活动崩溃的主要内容,如果未能解决你的问题,请参考以下文章

无法让 Vitamio VideoView 播放普通 Android VideoView 会播放的视频文件

Android VideoView未解决,动态读取权限BottomNavigationView的用法

Android VideoView未解决,动态读取权限BottomNavigationView的用法

尝试使用 VideoView 时应用程序崩溃

Android - VideoView 需要按两次 BACK 才能退出

为啥我不能从 VideoView 播放我的视频?