android studio中fragment_home中VideoView中的空引用

android studio中fragment_home中VideoView中的空引用,android,Android,我正在构建像tiktok这样的简单应用程序,其中我在fragment_home的VideoView中获得错误空引用。我在谷歌上搜索了很多,但找不到答案。android项目的层次结构如屏幕截图所示 Home片段的代码如下所示 package com.example.musically.ui.home; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.vi

我正在构建像tiktok这样的简单应用程序,其中我在fragment_home的VideoView中获得错误空引用。我在谷歌上搜索了很多,但找不到答案。android项目的层次结构如屏幕截图所示

Home片段的代码如下所示

package com.example.musically.ui.home;

import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;

import com.example.musically.R;

public class HomeFragment extends Fragment {

    private HomeViewModel homeViewModel;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {

        View viewInflate  = inflater.inflate(R.layout.fragment_home, container, false);
        //VideoView videoview=(VideoView)getView().findViewById(R.id.videoView);
        VideoView videoview=(VideoView)getActivity().findViewById(R.id.videoView);
        videoview.requestFocus();
        String videopath="android.resource://"+getActivity().getPackageName()+"/"+R.raw.video;
        Uri uri=Uri.parse(videopath);
        videoview.setVideoURI(uri);
        videoview.setMediaController(new MediaController(getActivity()));


        //Creating MediaControllegetExternalFilesDir(r

        //specify the location of media file

        return inflater.inflate(R.layout.fragment_home, container, false);



    }
}
在VideoView VideoView=VideoViewgetActivity.findViewByIdR.id.VideoView中显示空值

fragment_home的代码是

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <VideoView android:id="@+id/videoView"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    </VideoView>

</RelativeLayout>
错误


你应该更换你的电话线

VideoView videoview=(VideoView)getActivity().findViewById(R.id.videoView);
videoview.requestFocus();

并将最后一行从

return inflater.inflate(R.layout.fragment_home, container, false);

它应该会起作用

您还应该查找Fragment文档并阅读有关生命周期方法的内容,它将帮助您理解Fragment的基本原理。。。

在活动中,findViewById可通过该关键字访问,但对于片段,例如,它是您膨胀的视图 视图主视图=充气机。充气右布局。所选图层,空; 在这里,您可以查看mainView,现在mainView可以访问所有Id

看看下面的例子

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        View mainView = inflater.inflate (R.layout.lout_selected_layer,null);
        tvHeader = (TextView) mainView.findViewById(R.id.tv_header);
        tvHeader.setText(headerMessage.toString() + "");


        lvItems = (ListView) mainView.findViewById(R.id.lv_groups);
        lvItems.setAdapter(new AdapterLayer1Items(Layer1Fragment.this.getActivity(), 0,
                layer1Objs));
        ((MainActivity) this.getActivity()).setBannerVisibility(View.VISIBLE);

        llGpAdView = (LinearLayout) mainView.findViewById(R.id.gpAdd);


        return mainView;
    }

当前您的videoView对象为空,因此您将获得空指针异常Return inflater.inflater.layout.fragment\u home,container,false;如果错误,您必须返回maniView,因为您的情况是viewInflate,所以最后一行应该是return viewInflate;不要使用com.my_lib.base.VideoView这只是一个示例包如果您使用android自己的视频视图,那么您以前的代码是可以的,您只需遵循这个答案,包括以前的注释,但是如果您使用第三方lib作为视频视图,那么您必须在xml文件中添加包名,我希望您这次能理解。假设您的视频文件名为ep_01.mp4保存在以下位置,如/res/raw/ep_01,请记住,如果您保存在raw文件夹中,则该文件应不带扩展名。然后**String uriPath=android。resource://com.example.musically/raw/ep_01; Uri=Uri.parseuriPath;video.setVideoURIuri***工作正常,视频中有问题。。。。你能为我们创建像tiktok这样的定制mediaController提供参考吗?我真的不太了解tiktok,但我可以向你保证**FFmpeg**非常棒,、和
VideoView videoview=(VideoView)viewInflate.findViewById(R.id.videoView);
videoview.requestFocus();
return inflater.inflate(R.layout.fragment_home, container, false);
return viewInflate;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        View mainView = inflater.inflate (R.layout.lout_selected_layer,null);
        tvHeader = (TextView) mainView.findViewById(R.id.tv_header);
        tvHeader.setText(headerMessage.toString() + "");


        lvItems = (ListView) mainView.findViewById(R.id.lv_groups);
        lvItems.setAdapter(new AdapterLayer1Items(Layer1Fragment.this.getActivity(), 0,
                layer1Objs));
        ((MainActivity) this.getActivity()).setBannerVisibility(View.VISIBLE);

        llGpAdView = (LinearLayout) mainView.findViewById(R.id.gpAdd);


        return mainView;
    }