Java VideoView未在RecyclerView中播放视频或音频

Java VideoView未在RecyclerView中播放视频或音频,java,android,audio,android-recyclerview,android-videoview,Java,Android,Audio,Android Recyclerview,Android Videoview,嗨,我正在尝试创建一个视频日志片段,它有一个recyclerview,其中每个列表项中都包含一个标题、一个情绪和一个视频。出于某种原因,视频视图甚至没有出现。videofilePath保存正确,我已使用println语句进行了检查。我没有收到任何错误,但它完全崩溃了。下一个列表项在视频显示之前开始 这是我的ViewHolder类 public class JournalViewHolder extends RecyclerView.ViewHolder{ private TextView tit

嗨,我正在尝试创建一个视频日志片段,它有一个recyclerview,其中每个列表项中都包含一个标题、一个情绪和一个视频。出于某种原因,视频视图甚至没有出现。videofilePath保存正确,我已使用println语句进行了检查。我没有收到任何错误,但它完全崩溃了。下一个列表项在视频显示之前开始

这是我的ViewHolder类

public class JournalViewHolder extends RecyclerView.ViewHolder{
private TextView title;
private TextView mood;
private VideoView mVideoView;
MediaController mMediaController;
Context mContext;

public JournalViewHolder(View view, Context context){
    super(view);
    mContext = context;
    title = (TextView)view.findViewById(R.id.JournalTitle);
    mood = (TextView)view.findViewById(R.id.JournalMood);
    mVideoView = (VideoView)view.findViewById(R.id.JournalVideo);
    mMediaController = new MediaController(context);
}

public void bind(JournalEntry journalEntry){
    title.setText(journalEntry.getTitle());
    mood.setText(journalEntry.getMood());
    if(journalEntry.getVideoFileName() != null){
        Uri uri  = Uri.parse(journalEntry.getVideoFileName());
        mVideoView.setVideoURI(uri);
        mVideoView.requestFocus();
        mVideoView.setMediaController(mMediaController);
        mVideoView.setZOrderOnTop(true);
        mVideoView.start();
    }
}
}

这是我的适配器类

public class JournalRecyclerViewAdapter extends RecyclerView.Adapter<JournalViewHolder> {
公共类JournalRecycleServiceAdapter扩展了RecyclerView.Adapter{ 私人名单; 私有上下文

public JournalRecyclerViewAdapter(List<JournalEntry> entries, Context context){
    mJournalEntries = entries;
    mContext = context;
}

@Override
public JournalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View view = inflater.inflate(R.layout.journal_list_items, parent, false);
    JournalViewHolder holder = new JournalViewHolder(view, mContext);

    return holder;
}

@Override
public void onBindViewHolder(JournalViewHolder holder, int position) {
    JournalEntry entry = mJournalEntries.get(position);
    holder.bind(entry);
}

@Override
public int getItemCount() {
    return mJournalEntries.size();
}
PublicJournalRecycleServiceAdapter(列表条目、上下文){
mJournalEntries=条目;
mContext=上下文;
}
@凌驾
public JournalViewHolder onCreateViewHolder(视图组父级,int-viewType){
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
视图=充气机。充气(R.layout.journal\u list\u项目,父项,false);
日记账夹持器=新日记账夹(视图,mContext);
报税表持有人;
}
@凌驾
BindViewHolder上的公共无效(JournalViewHolder,内部位置){
JournalEntry=mJournalEntries.get(位置);
持有人。绑定(条目);
}
@凌驾
public int getItemCount(){
返回mJournalEntries.size();
}
}

下面是我的类,它启动了项目列表和recyclerview

public class JournalView extends FragmentLoggingLifeCycler {
private RecyclerView mRecyclerView;
DataAccess mDataAccess;
List<JournalEntry> mEntryList;
public static final String USERNAME_KEY = "username";
public static final String PASSWORD_KEY = "password";
String password;
String username;
User currentUser;
private Context mContext;

public JournalView() {
    // Required empty public constructor
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mContext = activity.getApplicationContext();
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    mContext = context;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_journal_view, container, false);
    Bundle data = getArguments();
    username = data.getString(USERNAME_KEY);
    password = data.getString(PASSWORD_KEY);
    LinearLayoutManager manager = new LinearLayoutManager(getActivity());
    mDataAccess = DataAccess.getDataAccess(container.getContext());
    currentUser = mDataAccess.getLoginUser(username, password);


     mEntryList = mDataAccess.getAllJournals();
        //mDataAccess.mDatabase.delete(Scheme.Journal.NAME, null, null);
//        mEntryList = trimList(mEntryList, currentUser.getUsername());
//        for(int counter = 0; counter < mEntryList.size(); counter++){
//            System.out.println(mEntryList.get(counter).getTitle());
//        }
        mRecyclerView = (RecyclerView)view.findViewById(R.id.JournalList);
        mRecyclerView.setLayoutManager(manager);
        mRecyclerView.setAdapter(new JournalRecyclerViewAdapter(mEntryList, mContext));
        return view;
    }

private static List<JournalEntry> trimList(List<JournalEntry> entries, String username){
    List<JournalEntry> returnedList = new ArrayList<>();

    for(int i = 0; i< returnedList.size(); i++){
        System.out.println(entries.get(i).getUsername()+ ", " +username);
        if(entries.get(i).getUsername().equals(username)){
            returnedList.add(entries.get(i));
        }
    }
    return returnedList;
}
公共类JournalView扩展了FragmentLoggingLifeCycler{
私人回收视图mRecyclerView;
数据访问mDataAccess;
名单名单;
公共静态最终字符串USERNAME\u KEY=“USERNAME”;
公共静态最终字符串密码\u KEY=“PASSWORD”;
字符串密码;
字符串用户名;
用户当前用户;
私有上下文;
公共新闻视图(){
//必需的空公共构造函数
}
@凌驾
公共事务主任(活动){
超级转速计(活动);
mContext=activity.getApplicationContext();
}
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
mContext=上下文;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u journal\u视图,容器,false);
Bundle data=getArguments();
username=data.getString(username\u键);
password=data.getString(密码\密钥);
LinearLayoutManager=newlinearlayoutmanager(getActivity());
mDataAccess=DataAccess.getDataAccess(container.getContext());
currentUser=mDataAccess.getLoginUser(用户名、密码);
mEntryList=mDataAccess.getAllJournals();
//mDataAccess.mDatabase.delete(Scheme.Journal.NAME,null,null);
//mEntryList=trimList(mEntryList,currentUser.getUsername());
//对于(int counter=0;counter
}

下面是我的XML文件

<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/JournalList">

列出项目文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:layout_weight="2">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:text="@string/Title"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/JournalTitle"/>
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="2"
    android:orientation="horizontal">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:text="@string/Mood"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/JournalMood"/>

</LinearLayout>
<VideoView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:id="@+id/JournalVideo"
    android:visibility="visible"/>


查看此示例代码,了解如何在RecyclerView中播放视频

我正在开发一个名为OneItem的库,它可能会帮助您。

#选择Itemat(int位置)
,开始使用任意视频视图(如MediaPlayer或ExoPlayer)播放视频。

#UnSelectItemAt(int位置)
中,停止播放视频并将其释放。

但是视频和RecyclerView的答案非常稀少,我也遇到了在RecyclerView中加载视频的问题,当我尝试向上或向下滚动应用程序时崩溃,它说空点你知道FullScreenVideoLayout吗,这就是我在Github上看到你的项目的原因,但是请你尝试一下屏幕截图和一些文档@atabouraya。谢谢