Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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 MediaController MediaController=新的MediaController(此);正在显示错误_Java_Android_Firebase_Firebase Storage_Mediacontroller - Fatal编程技术网

Java MediaController MediaController=新的MediaController(此);正在显示错误

Java MediaController MediaController=新的MediaController(此);正在显示错误,java,android,firebase,firebase-storage,mediacontroller,Java,Android,Firebase,Firebase Storage,Mediacontroller,我正在开发一个应用程序,我无法使用RecyclerView播放Firebase存储中的视频 但当我试图用上下文“this”声明MeidaController时,它显示了错误。请检查我的密码 当我在NewsViewHolder中声明Mediacontroller时会出现错误。我不知道在哪里声明MediaController 新闻活动(启动器) package com.cornicore.newsapp; 导入android.media.MediaPlayer; 导入android.net.Uri;

我正在开发一个应用程序,我无法使用
RecyclerView
播放Firebase存储中的视频

但当我试图用上下文“this”声明MeidaController时,它显示了错误。请检查我的密码

当我在NewsViewHolder中声明Mediacontroller时会出现错误。我不知道在哪里声明
MediaController

新闻活动(启动器)

package com.cornicore.newsapp;
导入android.media.MediaPlayer;
导入android.net.Uri;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.content.Context;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.MediaController;
导入android.widget.ProgressBar;
导入android.widget.VideoView;
导入com.firebase.ui.database.FirebaseRecyclerAdapter;
导入com.firebase.ui.database.FirebaseRecyclerOptions;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.Query;
公共类NewsActivity扩展了AppCompatActivity{
私人回收站;
私有数据库参考数据库;
专用FirebaseRecyclerAdapter mPeopleRVAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news);
片名(“新闻”);
//这里的“新闻”将反映您在Firebase中所称的数据库。
mDatabase=FirebaseDatabase.getInstance().getReference().child(“新闻”);
mDatabase.keepSynced(true);
mPeopleRV=(RecycleView)findViewById(R.id.myRecycleView);
DatabaseReference personsRef=FirebaseDatabase.getInstance().getReference().child(“新闻”);
Query personsQuery=personsRef.orderByKey();
mPeopleRV.hasFixedSize();
mPeopleRV.setLayoutManager(新的LinearLayoutManager(本));
FirebaseRecyclerOptions personOptions=新建FirebaseRecyclerOptions.Builder().setQuery(personQuery,News.class).build();
mPeopleRVAdapter=新的FirebaseRecyclerAdapter(PersonOptions){
@凌驾
受保护的无效onBindViewHolder(NewsActivity.NewsViewHolder,最终整型位置,最终新闻模型){
holder.setVideo_url(getBaseContext(),model.getVideo_url());
}
@凌驾
public NewsActivity.NewsViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.news_行,父级,假);
返回新的NewsActivity.NewsViewHolder(视图);
}
};
mPeopleRV.setAdapter(mPeopleRVAdapter);
}
@凌驾
public void onStart(){
super.onStart();
mPeopleRVAdapter.startListening();
}
@凌驾
公共void onStop(){
super.onStop();
mPeopleRVAdapter.stopListening();
}
公共静态类NewsViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
公共新闻视图持有者(查看项目视图){
超级(项目视图);
mView=项目视图;
}
公共void setVideo_url(上下文ctx,字符串url){
Uri=Uri.parse(url);
VideoView VideoView=(VideoView)mView.findviewbyd(R.id.video);
setVideoURI(uri);
videoView.requestFocus();
videoView.start();
***MediaController MediaController=新的MediaController(此)***
videoView.setMediaController(mediaController);
mediaController.setAnchorView(视频视图);
videoView.setOnInfoListener(新的MediaPlayer.OnInfoListener(){
@凌驾
公共布尔值onInfo(MediaPlayer mp,int what,int extra){
ProgressBar ProgressBar=(ProgressBar)mView.findViewById(R.id.ProgressBar);
if(what==MediaPlayer.MEDIA\u INFO\u BUFFERING\u END){
progressBar.setVisibility(View.GONE);
返回true;
}
else if(what==MediaPlayer.MEDIA\u INFO\u BUFFERING\u START){
progressBar.setVisibility(View.VISIBLE);
返回true;
}
返回false;
}
});
}
}
}

要解决此问题,请创建一个类型为
Context
的全局变量,如下所示:

private Context context;
MediaController mediaController = new MediaController(context);
然后在
onCreate()方法中初始化它:

context = this;
然后在创建
MediaController
类的新对象时,将此
context
对象传递给构造函数,如下所示:

private Context context;
MediaController mediaController = new MediaController(context);

使用“Exoplayer”代替MediaController或VideoView。 它对我有用。 我也在构建一个类似的应用程序,在研究了你的问题后,我将在我的应用程序中使用“FirebaseRecylerView”,而不是RecyclerView。
链接到Exoplayer的开发者指南:

添加以下内容:导入android.widget.MediaController


您正在使用导入到会话。

更改
MediaController MediaController=new MediaController(此)


您应该将
context
传递给
MediaController
当您提供代码建议时,最好将其格式化为代码,而不是使用粗体格式。您可以通过在代码中添加``来实现这一点