无法在RecyclerView中从Firebase获取数据

时间:2019-11-12 08:50:44

标签: java android firebase firebase-realtime-database android-recyclerview

每个人都在尝试制作音乐应用程序,为此,我在RecyclerView中创建了一个水平HomeFragment,并且我的水平RecyclerView正在获得带有艺术家姓名的图像。

但是在单击后,我加载了另一个活动。在我的另一项活动中,我试图从listView的{​​{1}}中的Firebase加载SongsData。

但是问题是我没有从Firebase获取数据,而是返回了空数据。我在下面提供了代码,这是Firebase数据库的屏幕截图:-ScreenShot

我的列表类别:-

RecyclerView

我的适配器类:-

    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);

            }
        }

    }

很抱歉有这么多代码,但这并不难解决。如果您找到解决方案,请回复我。感谢您阅读本文。

1 个答案:

答案 0 :(得分:1)

代码中的问题在于,TestUploads类中的字段名称与数据库中的属性名称不同。您在TestUploads类中有一个名为songName的字段,但是在数据库中,我将其视为SongName,这是不正确的。名称必须匹配。当您使用名为getSongName()的吸气剂时,Firebase会在数据库中查找名为songName不是 SongName的字段。看到小写的s与大写的S

有两种方法可以解决此问题。第一个方法是删除数据库中的数据,然后使用TestUploads类中存在的以小写开头的字段名再次添加。

如果不允许使用第一种解决方案,则第二种方法是使用annotations。因此,您应该在吸气剂之前使用PropertyName批注。因此,在您的TestUploads类中,吸气剂应如下所示:

@PropertyName("SongName")
public String getSongName() {
    return songName;
}