Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理由getView()引起的NullPointerException_Java_Android_Android Fragments_Android Activity - Fatal编程技术网

Java 处理由getView()引起的NullPointerException

Java 处理由getView()引起的NullPointerException,java,android,android-fragments,android-activity,Java,Android,Android Fragments,Android Activity,我对我的应用程序崩溃的原因感到困惑,我在这行收到一个NullPointerException: myVideoView = (VideoView) getView().findViewById(R.id.video_view); 片段的完整代码: public class FirstFragment extends Fragment { //used in VideoView private VideoView myVideoView; private int posi

我对我的应用程序崩溃的原因感到困惑,我在这行收到一个NullPointerException:

myVideoView = (VideoView) getView().findViewById(R.id.video_view);
片段的完整代码:

public class FirstFragment extends Fragment {
    //used in VideoView
    private VideoView myVideoView;
    private int position = 0;
    private ProgressDialog progressDialog;
    private MediaController mediaControls;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View view = inflater.inflate(R.layout.fragment_one, container, false);
        if (mediaControls == null) {
            mediaControls = new MediaController(getActivity());
        }
        //initialize the VideoView
        myVideoView = (VideoView) getView().findViewById(R.id.video_view);
        // create a progress bar while the video file is loading
        progressDialog = new ProgressDialog(getActivity());
        // set a title for the progress bar
        progressDialog.setTitle("IAWS");
        // 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://" + MainActivity.PACKAGE_NAME + "/" + R.raw.iaws));
        } catch (Exception e) {
            if(e.getMessage()!=null) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
        }
        myVideoView.requestFocus();
        //setOnPreparedListener in order to know when the video file is ready for playback
        myVideoView.setOnPreparedListener(new MediaPlayer.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) {
                    //remove comments if you want video to start automatically
                    //myVideoView.start();
                } else {
                    //coming from a resumed activity, video playback will be paused
                    myVideoView.pause();
                }
            }
        });
        return (FrameLayout) inflater.inflate(R.layout.fragment_one, container, false);
    }
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        // Use onSaveInstanceState in order to store the video playback position for orientation change
        savedInstanceState.putInt("Position", myVideoView.getCurrentPosition());
        myVideoView.pause();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        position = savedInstanceState.getInt("Position");
        myVideoView.seekTo(position);
        }
}
日志详细信息:

08-27 22:46:22.505  14044-14044/com.imsg.mainproject E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.imsg.mainproject, PID: 14044
    java.lang.NullPointerException
            at com.imsg.mainproject.FirstFragment.onCreateView(FirstFragment.java:34)
            at android.app.Fragment.performCreateView(Fragment.java:1700)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
            at android.app.BackStackRecord.run(BackStackRecord.java:684)
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1453)
            at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5476)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)

提前感谢您的帮助。

您正在
onCreateView
中调用
getView()
。但是由
getView()
返回的
视图
在您在
onCreateView
末尾返回后才可用

您创建了
视图

替换

myVideoView = (VideoView) getView().findViewById(R.id.video_view);


你应该很好。

既然有了
视图
可以使用,为什么还要使用
getView()
。为什么要在最后再次对视图进行重新充气,只需返回
视图
object无数次。。。在
Fragment.onCreateView
-
Fragment.getView
中,始终返回null。。。使用谷歌
myVideoView = (VideoView) getView().findViewById(R.id.video_view);
myVideoView = (VideoView) view.findViewById(R.id.video_view);