单击全屏图标时VideoView全屏

时间:2018-01-14 08:21:12

标签: android nullpointerexception

我正在创建android应用程序。我成功添加了mediacontroller并在videoview中添加了一个小图标,以便在点击全屏图标时将视频全屏显示到LandScape模式。但是当我点击FullScreen图标时出错。这是我的代码。

详情活动:

import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.VideoView;

import org.w3c.dom.Text;

public class DetailsActivity extends AppCompatActivity {
    VideoView vidView;
    TextView description;
    ImageButton mPlayButton;
    TextView movienamedetails;
    TextView movieCategory;
    ImageView imageCover;
    TextView movieDuration;
    TextView movieYear;
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_details);
        vidView=(VideoView) findViewById(R.id.myVideo);
        description=(TextView)findViewById(R.id.tv_description_detail);
        imageCover=(ImageView)findViewById(R.id.imagecoverdetails);
        movienamedetails = (TextView) findViewById(R.id.movienamedetails);
        movieCategory = (TextView) findViewById(R.id.moviecategorty);
        movieDuration = (TextView) findViewById(R.id.movieDuration);
        movieYear = (TextView) findViewById(R.id.moviedate);

        String fullScreen =  getIntent().getStringExtra("fullScreenInd");
        if("y".equals(fullScreen)){
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getSupportActionBar().hide();
        }
        Intent intent = getIntent();

        String desc_detail = intent.getStringExtra("description_details");
        String movie_name = intent.getStringExtra("moviename_details");
        String movie_category = intent.getStringExtra("movie_category");
        String movie_durationz = intent.getStringExtra("movie_duration");
        String movie_time = intent.getStringExtra("movie_year");
        int image = intent.getIntExtra("image",0);
        String vidAddress = intent.getStringExtra("movie_links");
        imageCover.setImageResource(image);
        Uri vidUri = Uri.parse(vidAddress);
        vidView.setVideoURI(vidUri);
        mPlayButton = (ImageButton) findViewById(R.id.play_button);
        mPlayButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                vidView.start();
                // hide button once playback starts
                    mPlayButton.setVisibility(View.GONE);
                }
        });

        MediaController vidControl = new FullScreenMediaController(this);
        vidControl.setAnchorView(vidView);
        vidView.setMediaController(vidControl);
        description.setText(desc_detail);
        movienamedetails.setText(movie_name);
        movieCategory.setText(movie_category);
        movieDuration.setText(movie_durationz);
        movieYear.setText(movie_time);
    }
}

FullScreenMediaController:

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.MediaController;

public class FullScreenMediaController extends MediaController {

    private ImageButton fullScreen;
    private String isFullScreen;

    public FullScreenMediaController(Context context) {
        super(context);
    }

    @Override
    public void setAnchorView(View view) {

        super.setAnchorView(view);

        //image button for full screen to be added to media controller
        fullScreen = new ImageButton(super.getContext());

        FrameLayout.LayoutParams params =
                new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.RIGHT;
        params.rightMargin = 80;
        addView(fullScreen, params);

        //fullscreen indicator from intent
        isFullScreen =  ((Activity)getContext()).getIntent().
                getStringExtra("fullScreenInd");

        if("y".equals(isFullScreen)){
            fullScreen.setImageResource(R.drawable.fullscreenexit);
        }else{
            fullScreen.setImageResource(R.drawable.fullscreen);
        }

        //add listener to image button to handle full screen and exit full screen events
        fullScreen.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(getContext(),DetailsActivity.class);

                if("y".equals(isFullScreen)){
                    intent.putExtra("fullScreenInd", "");
                }else{
                    intent.putExtra("fullScreenInd", "y");
                }
                ((Activity)getContext()).startActivity(intent);
            }
        });
    }
}

错误原因记录是:

  

01-14 09:38:51.908 10500-10500 / com.app.show E / AndroidRuntime:FATAL   例外:主程序:com.zeeshan.echoshow,PID:10500   java.lang.RuntimeException:无法启动活动   ComponentInfo {} com.app.show/com.app.show.DetailsActivity:   java.lang.NullPointerException:uriString at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3003)   在   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3064)   在android.app.ActivityThread.-wrap14(ActivityThread.java)处   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1659)   在android.os.Handler.dispatchMessage(Handler.java:102)at   android.os.Looper.loop(Looper.java:154)at   android.app.ActivityThread.main(ActivityThread.java:6823)at   java.lang.reflect.Method.invoke(Native Method)at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1563)   在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)   引起:java.lang.NullPointerException:uriString at   android.net.Uri $ StringUri。(Uri.java:475)at   android.net.Uri $ StringUri。(Uri.java)at   android.net.Uri.parse(Uri.java:437)at   com.zeeshan.echoshow.DetailsActivity.onCreate(DetailsActivity.java:63)   在android.app.Activity.performCreate(Activity.java:6977)at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)   在   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)   在   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3064)   在android.app.ActivityThread.-wrap14(ActivityThread.java)处   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1659)   在android.os.Handler.dispatchMessage(Handler.java:102)at   android.os.Looper.loop(Looper.java:154)at   android.app.ActivityThread.main(ActivityThread.java:6823)at   java.lang.reflect.Method.invoke(Native Method)

应用截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

在DetailsActivity,OnCreate方法中,您期望Uri有意图。您没有从FullScreenMediaController

发送您在DetailsActivity中期望的所有数据
String vidAddress = intent.getStringExtra("movie_links");
        imageCover.setImageResource(image);
        Uri vidUri = Uri.parse(vidAddress);

在FullScreenMediaController中,您可以发送Uri,例如:

ntent intent = new Intent(getContext(),DetailsActivity.class);

            if("y".equals(isFullScreen)){
                intent.putExtra("fullScreenInd", "");
            }else{
                intent.putExtra("fullScreenInd", "y");
            }
            intent.putExtra("Movie URI Here", "movie_links");
            ((Activity)getContext()).startActivity(intent);

另外,通过检查:

为空值做好准备
    if(vidAddress != null ){
       Uri vidUri = Uri.parse(vidAddress);
// some more code here

}