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的用法