gpt4 book ai didi

java - 无法在 RecyclerView 中从 Firebase 获取数据

转载 作者:行者123 更新时间:2023-12-02 01:15:01 25 4
gpt4 key购买 nike

大家,我试图制作一个音乐应用程序,为此,我在我的HomeFragment和我的水平RecyclerView中创建了一个水平RecyclerView > 正在获取带有艺术家姓名的图像。

但是单击后我加载了另一个 Activity 。在我的其他 Activity 中,我尝试使用 RecyclerViewlistView 中从 firebase 加载 SongsData。

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

我的列表类:-

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

}
}

}

我的 Activity :-

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

}
});
}
}

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

最佳答案

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

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

如果不允许您使用第一种解决方案,那么第二种方法将使用注释。所以你应该使用PropertyName注释在 getter 前面。因此,在您的 TestUploads 类中,getter 应该如下所示:

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

关于java - 无法在 RecyclerView 中从 Firebase 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58815039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com