Java 在RecyclerView中未从Firebase获取数据
每个人,我都在尝试制作一个音乐应用程序,为此,我在我的Java 在RecyclerView中未从Firebase获取数据,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,每个人,我都在尝试制作一个音乐应用程序,为此,我在我的HomeFragment中创建了一个水平RecyclerView,我的水平RecyclerView得到了一张有艺术家名字的图像 但单击后,我加载另一个活动。在我的另一项活动中,我试图使用RecyclerView从firebase在列表视图中加载SongsData 但问题是我没有从Firebase获取数据,它返回的是空数据。我在下面提供了我的代码,这是我的Firebase数据库的屏幕截图:- 我的列表类:- public class T
HomeFragment
中创建了一个水平RecyclerView
,我的水平RecyclerView
得到了一张有艺术家名字的图像
但单击后,我加载另一个活动。在我的另一项活动中,我试图使用RecyclerView
从firebase在列表视图中加载SongsData
但问题是我没有从Firebase获取数据,它返回的是空数据。我在下面提供了我的代码,这是我的Firebase数据库的屏幕截图:-
我的列表类:-
public class TestUploads
{
private String songName;
private String songImageUri;
private String songUrl;
private String artistName;
public TestUploads() {
}
public String getSongName() {
return songName;
}
public void setSongName(String SongName) {
this.songName = SongName;
}
public String getSongImageUri() {
return songImageUri;
}
public void setSongImageUri(String SongImageUri) {
this.songImageUri = SongImageUri;
}
public String getSongUrl() {
return songUrl;
}
public void setSongUrl(String SongUrl) {
this.songUrl = songUrl;
}
public TestUploads(String SongImageUri, String SongName, String SongUrl ) {
this.songName = SongName;
this.artistName = SongImageUri;
this.songUrl = SongUrl;
}
}
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.TestViewHolder>{
private Context mContext;
private List<TestUploads> mUploads;
public TestAdapter(Context context , List<TestUploads> uploads) {
mContext = context;
mUploads = uploads;
}
@NonNull
@Override
public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.test_package_layout , parent ,false);
return new TestViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
TestUploads uploadcurrent = mUploads.get(position);
holder.name.setText(uploadcurrent.getSongName());
Glide.with(mContext)
.load(uploadcurrent.getSongImageUri())
.into(holder.image_view);
}
@Override
public int getItemCount() {
return mUploads
.size();
}
public class TestViewHolder extends RecyclerView.ViewHolder {
public TextView name;
public TextView artist_name;
public CircleImageView image_view;
public TestViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.test_package_song_name);
artist_name = itemView.findViewById(R.id.test_package_artist_name);
image_view = itemView.findViewById(R.id.test_package_image_name);
}
}
}
public class TestActivity extends AppCompatActivity {
private ValueEventListener listener;
private DatabaseReference reference;
private List<TestUploads> mUploads;
private RecyclerView mRecyclerView;
private TestAdapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_package_activity);
reference = FirebaseDatabase.getInstance().getReference("ArtistView").child(getIntent().getStringExtra("Artist"))
.child("Songs");
Toast.makeText(this, "" + getIntent().getStringExtra("Artist"), Toast.LENGTH_SHORT).show();
mUploads = new ArrayList<>();
mRecyclerView = findViewById(R.id.test_pacakge_recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.smoothScrollToPosition(0);
adapter = new TestAdapter(this , mUploads);
mRecyclerView.setAdapter(adapter);
listener = reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mUploads.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
TestUploads uploads =postSnapshot.getValue(TestUploads.class);
mUploads.add(uploads);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
我的适配器类:-
public class TestUploads
{
private String songName;
private String songImageUri;
private String songUrl;
private String artistName;
public TestUploads() {
}
public String getSongName() {
return songName;
}
public void setSongName(String SongName) {
this.songName = SongName;
}
public String getSongImageUri() {
return songImageUri;
}
public void setSongImageUri(String SongImageUri) {
this.songImageUri = SongImageUri;
}
public String getSongUrl() {
return songUrl;
}
public void setSongUrl(String SongUrl) {
this.songUrl = songUrl;
}
public TestUploads(String SongImageUri, String SongName, String SongUrl ) {
this.songName = SongName;
this.artistName = SongImageUri;
this.songUrl = SongUrl;
}
}
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.TestViewHolder>{
private Context mContext;
private List<TestUploads> mUploads;
public TestAdapter(Context context , List<TestUploads> uploads) {
mContext = context;
mUploads = uploads;
}
@NonNull
@Override
public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.test_package_layout , parent ,false);
return new TestViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
TestUploads uploadcurrent = mUploads.get(position);
holder.name.setText(uploadcurrent.getSongName());
Glide.with(mContext)
.load(uploadcurrent.getSongImageUri())
.into(holder.image_view);
}
@Override
public int getItemCount() {
return mUploads
.size();
}
public class TestViewHolder extends RecyclerView.ViewHolder {
public TextView name;
public TextView artist_name;
public CircleImageView image_view;
public TestViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.test_package_song_name);
artist_name = itemView.findViewById(R.id.test_package_artist_name);
image_view = itemView.findViewById(R.id.test_package_image_name);
}
}
}
public class TestActivity extends AppCompatActivity {
private ValueEventListener listener;
private DatabaseReference reference;
private List<TestUploads> mUploads;
private RecyclerView mRecyclerView;
private TestAdapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_package_activity);
reference = FirebaseDatabase.getInstance().getReference("ArtistView").child(getIntent().getStringExtra("Artist"))
.child("Songs");
Toast.makeText(this, "" + getIntent().getStringExtra("Artist"), Toast.LENGTH_SHORT).show();
mUploads = new ArrayList<>();
mRecyclerView = findViewById(R.id.test_pacakge_recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.smoothScrollToPosition(0);
adapter = new TestAdapter(this , mUploads);
mRecyclerView.setAdapter(adapter);
listener = reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mUploads.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
TestUploads uploads =postSnapshot.getValue(TestUploads.class);
mUploads.add(uploads);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
公共类TestAdapter扩展了RecyclerView.Adapter{
私有上下文;
私人列表多路复用器;
公共测试适配器(上下文、列表上载){
mContext=上下文;
mUploads=上传;
}
@非空
@凌驾
公共TestViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图v=LayoutFlater.from(mContext)。充气(R.layout.test\u package\u布局,父级,false);
返回新的TestViewHolder(v);
}
@凌驾
public void onBindViewHolder(@NonNull TestViewHolder,int位置){
TestUploads uploadcurrent=mUploads.get(位置);
holder.name.setText(uploadcurrent.getSongName());
使用(mContext)滑动
.load(uploadcurrent.getSongImageUri())
.进入(支架图像视图);
}
@凌驾
public int getItemCount(){
回传多倍体
.size();
}
公共类TestViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图名称;
公共文本视图艺术家名称;
公共环路图像视图图像视图;
公共TestViewHolder(@NonNull View itemView){
超级(项目视图);
name=itemView.findviewbyd(R.id.test\u package\u song\u name);
艺术家名称=itemView.findViewById(R.id.test\u package\u艺术家名称);
image\u view=itemView.findviewbyd(R.id.test\u package\u image\u name);
}
}
}
我的活动:-
public class TestUploads
{
private String songName;
private String songImageUri;
private String songUrl;
private String artistName;
public TestUploads() {
}
public String getSongName() {
return songName;
}
public void setSongName(String SongName) {
this.songName = SongName;
}
public String getSongImageUri() {
return songImageUri;
}
public void setSongImageUri(String SongImageUri) {
this.songImageUri = SongImageUri;
}
public String getSongUrl() {
return songUrl;
}
public void setSongUrl(String SongUrl) {
this.songUrl = songUrl;
}
public TestUploads(String SongImageUri, String SongName, String SongUrl ) {
this.songName = SongName;
this.artistName = SongImageUri;
this.songUrl = SongUrl;
}
}
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.TestViewHolder>{
private Context mContext;
private List<TestUploads> mUploads;
public TestAdapter(Context context , List<TestUploads> uploads) {
mContext = context;
mUploads = uploads;
}
@NonNull
@Override
public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.test_package_layout , parent ,false);
return new TestViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
TestUploads uploadcurrent = mUploads.get(position);
holder.name.setText(uploadcurrent.getSongName());
Glide.with(mContext)
.load(uploadcurrent.getSongImageUri())
.into(holder.image_view);
}
@Override
public int getItemCount() {
return mUploads
.size();
}
public class TestViewHolder extends RecyclerView.ViewHolder {
public TextView name;
public TextView artist_name;
public CircleImageView image_view;
public TestViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.test_package_song_name);
artist_name = itemView.findViewById(R.id.test_package_artist_name);
image_view = itemView.findViewById(R.id.test_package_image_name);
}
}
}
public class TestActivity extends AppCompatActivity {
private ValueEventListener listener;
private DatabaseReference reference;
private List<TestUploads> mUploads;
private RecyclerView mRecyclerView;
private TestAdapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_package_activity);
reference = FirebaseDatabase.getInstance().getReference("ArtistView").child(getIntent().getStringExtra("Artist"))
.child("Songs");
Toast.makeText(this, "" + getIntent().getStringExtra("Artist"), Toast.LENGTH_SHORT).show();
mUploads = new ArrayList<>();
mRecyclerView = findViewById(R.id.test_pacakge_recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.smoothScrollToPosition(0);
adapter = new TestAdapter(this , mUploads);
mRecyclerView.setAdapter(adapter);
listener = reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mUploads.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
TestUploads uploads =postSnapshot.getValue(TestUploads.class);
mUploads.add(uploads);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
公共类测试活动扩展了AppCompative活动{
私人价值观;
私人数据库参考;
私人列表多路复用器;
私人回收视图mRecyclerView;
专用测试适配器;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.test\u package\u活动);
reference=FirebaseDatabase.getInstance().getReference(“ArtistView”).child(getIntent().getStringExtra(“艺术家”))
.儿童(“歌曲”);
Toast.makeText(this,“+getIntent().getStringExtra(“艺术家”),Toast.LENGTH_SHORT.show();
mUploads=newarraylist();
mRecyclerView=findViewById(R.id.test\u pacakge\u recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(新的LinearLayoutManager(this));
mRecyclerView.smoothScrollToPosition(0);
适配器=新约适配器(此为多端口);
mRecyclerView.setAdapter(适配器);
listener=reference.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
mUploads.clear();
对于(DataSnapshot postSnapshot:DataSnapshot.getChildren()){
TestUploads uploads=postSnapshot.getValue(TestUploads.class);
添加(上传);
}
adapter.notifyDataSetChanged();
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
}
很抱歉有这么多代码,但这并不难解决。如果你找到了解决办法,请回复我。感谢阅读。代码中的问题在于TestUploads
类中字段的名称与数据库中属性的名称不同。您的TestUploads
类中有一个名为songName
的字段,但在您的数据库中,我看到它是songName
,这是不正确的。名称必须匹配。当您使用名为getSongName()
的getter时,Firebase正在数据库中查找名为songName
和非songName
的字段。请参见小写字母s
与大写字母s
有两种方法可以解决这个问题。第一种方法是删除数据库中的数据,然后使用以小写字母开头的字段名再次添加数据,就像TestUploads
类中存在的那样
如果不允许您使用第一种解决方案,那么第二种方法将是使用注释
。因此,您应该在getter前面使用注释。因此,在您的TestUploads
类中,getter应该如下所示:
@PropertyName("SongName")
public String getSongName() {
return songName;
}
代码中的问题在于TestUploads
类中字段的名称与数据库中属性的名称不同。您的TestUploads
类中有一个名为songName
的字段,但在您的数据库中,我看到它是songName
,这是不正确的。名称必须匹配。当您使用名为getSongName()
的getter时,Firebase正在数据库中查找名为songName
和非songName
的字段。请参见小写的s