2016-07-06 4 views
1

자습서 (https://examples.javacodegeeks.com/android/android-videoview-example/)를 사용하여 내 앱에서 동영상보기 활동을 빌드했지만 열 때 크래시가 계속 발생합니다. 나는 내 목숨을 구하기 위해 그것을 이해할 수 없다. 여기에 다른 게시물을 확인했습니다와의 방법들로 코드에서Android VideoView Activity crashing

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); 
    } 
} 
+0

당신은 무엇을 얻고 있는지 오류를 게시 할 수 있습니까? – Ravin

+0

확실하지는 모르겠지만 특정 점을 지적 할 수있는 유일한 것입니다 ... 원인 : java.lang.NullPointerException : 가상 메소드 'boolean android.widget.VideoView.requestFocus() 'null 객체 참조 –

+0

이것은 실제로 main_activity 라우트에서 VideoView (R.id.video_view)가 존재하지 않는다는 것을 의미합니다. @phongvan 아래의 답변 에서처럼 VideoView가있는 활동에 대한 레이아웃을 하나 만드십시오. 두 레이아웃의 콘텐츠를 붙여 넣습니다. – Ravin

답변

1

이없는 두 가지 레이아웃이 setContentView() 있습니다. 그것이 귀하의 오류의 이유입니다. merge 두 개의 레이아웃이 필요하며 해당보기에서 VideoView을 사용할 수 있어야합니다.

+0

그랬습니다. 몇 가지 분야에서 감독이었습니다. 두 번째 setContentView를 제거하고 처음에 content_demo를 변경해야합니다. activity_quote에 내 동영상보기가 없습니다. DOH! 그 점을 지적 해 주셔서 감사합니다. 매우 감사. –