DataSnapshot 缺少一个没有参数的构造函数
DataSnapshot is missing a constructor with no arguments
我正在我的应用程序中实施 Firebase Recyclerview UI。我已经实现了一个 recyclerview 适配器,它显示了以下异常。
以下是我的适配器代码:
FirebaseRecyclerAdapter<DataSnapshot, MyHolder> recyclerAdapter = new FirebaseRecyclerAdapter<DataSnapshot, MyHolder>(
DataSnapshot.class,
R.layout.row_slots,
MyHolder.class,
databaseReference.child("slots").child(uid).child(dayOfWeek).child("time")
) {
@Override
protected void populateViewHolder(MyHolder viewHolder, DataSnapshot model, int position) {
System.out.println("Key : "+model.getKey());
}
};
显示以下异常:
如何使用 FirebaseRecyclerAdapter 获取快照值?
当初始化你的 recyclerAdapter
时,你将 DataSnapshot.class
作为你的 modelClass
传递,其中 DataSnapshot 并没有一个我认为没有参数的构造函数是导致错误的原因,我也认为这会使 DataSnapshot
无效 modelClass
.
如 FirebaseRecyclerViewAdapter 中所述 modelClass
:
modelClass - Firebase will marshall the data at a location into an instance of a class that you provide
您应该通过创建满足您需要的对象来定义您自己的 modelClass
。 FirebaseRecyclerViewAdapter
link 上有一个简单示例,您可以查看。干杯!
编辑:
根据评论,我建议让您自己的 modelClass 对象有一个 DataSnapshot
作为参数。有关我所说内容的简单示例,请参阅下文。
public class ModelClass {
String sampleString;
ModelClass() {
}
ModelClass(DataSnapshot dataSnapshot) {
// Do what you need from the dataSnapshot here
sampleString = dataSnapshot.child("").toString();
}
}
我想从上面的例子中,你会明白我的意思。 但是,我不确定这是否值得推荐,也不确定是否可以接受。我以前没有尝试过这个,所以我也不确定它是否会起作用。
因为这个问题其实和贴出来的不一样。如果它不起作用,我建议发布一个不同的。快乐编码。干杯!
问题是DataSnapShot
是缺少一个无参数构造函数,所以你不能像这样直接使用它。
Use some other model class instead.
像这样:
创建您自己的名为 FriendlyMessage
的模型:
public class FriendlyMessage {
private String text;
private String name;
// Created constructor with no Arguments
public FriendlyMessage() {
}
public FriendlyMessage(String text, String name) {
this.text = text;
this.name = name;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Most important thing we have created constructor with no Arguments
which was missing in DataSnapShot
注意: 以上模型 class 只是一个示例,因为您是 firebase 的新手。您可以拥有自己的模型 class 以及您自己的参数类型和所有参数。
像这样在您的 Firebase Recyclerview 中使用它:
FirebaseRecyclerAdapter mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MyHolder>(
FriendlyMessage.class,
R.layout.row_slots,
MyHolder.class,
databaseReference.child("slots").child(uid).child(dayOfWeek).child("time")) {
@Override
protected void populateViewHolder(MyHolder viewHolder, FriendlyMessage friendlyMessage, int position)
{
}
};
编辑:
It also matter how you are pushing the data on Database. Do it
directly with your model class.
例如上面的模型 FriendlyMessage
像这样推:
FriendlyMessage friendlyMessage = new FriendlyMessage("message", "Username");
databaseReference.child(MESSAGES_CHILD).push().setValue(friendlyMessage);
此处您的 child()
与我的实现有些不同,这只是一个示例。
用于收听特定的 DataSnapShot :
databaseReference.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
//The PUSH ID OP WANTED
System.out.println("Push Id ---"+postSnapshot.getKey());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
})
Explaining the above listener. It will give you the DataSnapShot
Object for your every user who is falling inside your child "users". You can access Push id by getKey()
method.
firebaser(和 FirebaseUI 适配器的作者)在这里
已经有很多好的答案了。我确实通常建议创建一个代表您的数据对象的 Java class。
但是如果您打算使用 DataSnapshot
,您可以覆盖 FirebaseRecyclerAdapter.parseSnapshot
来处理 "conversion":
@Override
protected ChatMessage parseSnapshot(DataSnapshot snapshot) {
return snapshot;
}
我正在我的应用程序中实施 Firebase Recyclerview UI。我已经实现了一个 recyclerview 适配器,它显示了以下异常。 以下是我的适配器代码:
FirebaseRecyclerAdapter<DataSnapshot, MyHolder> recyclerAdapter = new FirebaseRecyclerAdapter<DataSnapshot, MyHolder>(
DataSnapshot.class,
R.layout.row_slots,
MyHolder.class,
databaseReference.child("slots").child(uid).child(dayOfWeek).child("time")
) {
@Override
protected void populateViewHolder(MyHolder viewHolder, DataSnapshot model, int position) {
System.out.println("Key : "+model.getKey());
}
};
显示以下异常:
如何使用 FirebaseRecyclerAdapter 获取快照值?
当初始化你的 recyclerAdapter
时,你将 DataSnapshot.class
作为你的 modelClass
传递,其中 DataSnapshot 并没有一个我认为没有参数的构造函数是导致错误的原因,我也认为这会使 DataSnapshot
无效 modelClass
.
如 FirebaseRecyclerViewAdapter 中所述 modelClass
:
modelClass - Firebase will marshall the data at a location into an instance of a class that you provide
您应该通过创建满足您需要的对象来定义您自己的 modelClass
。 FirebaseRecyclerViewAdapter
link 上有一个简单示例,您可以查看。干杯!
编辑:
根据评论,我建议让您自己的 modelClass 对象有一个 DataSnapshot
作为参数。有关我所说内容的简单示例,请参阅下文。
public class ModelClass {
String sampleString;
ModelClass() {
}
ModelClass(DataSnapshot dataSnapshot) {
// Do what you need from the dataSnapshot here
sampleString = dataSnapshot.child("").toString();
}
}
我想从上面的例子中,你会明白我的意思。 但是,我不确定这是否值得推荐,也不确定是否可以接受。我以前没有尝试过这个,所以我也不确定它是否会起作用。
因为这个问题其实和贴出来的不一样。如果它不起作用,我建议发布一个不同的。快乐编码。干杯!
问题是DataSnapShot
是缺少一个无参数构造函数,所以你不能像这样直接使用它。
Use some other model class instead.
像这样:
创建您自己的名为 FriendlyMessage
的模型:
public class FriendlyMessage {
private String text;
private String name;
// Created constructor with no Arguments
public FriendlyMessage() {
}
public FriendlyMessage(String text, String name) {
this.text = text;
this.name = name;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Most important thing we have created constructor with no Arguments which was missing in
DataSnapShot
注意: 以上模型 class 只是一个示例,因为您是 firebase 的新手。您可以拥有自己的模型 class 以及您自己的参数类型和所有参数。
像这样在您的 Firebase Recyclerview 中使用它:
FirebaseRecyclerAdapter mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MyHolder>(
FriendlyMessage.class,
R.layout.row_slots,
MyHolder.class,
databaseReference.child("slots").child(uid).child(dayOfWeek).child("time")) {
@Override
protected void populateViewHolder(MyHolder viewHolder, FriendlyMessage friendlyMessage, int position)
{
}
};
编辑:
It also matter how you are pushing the data on Database. Do it directly with your model class.
例如上面的模型 FriendlyMessage
像这样推:
FriendlyMessage friendlyMessage = new FriendlyMessage("message", "Username");
databaseReference.child(MESSAGES_CHILD).push().setValue(friendlyMessage);
此处您的 child()
与我的实现有些不同,这只是一个示例。
用于收听特定的 DataSnapShot :
databaseReference.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
//The PUSH ID OP WANTED
System.out.println("Push Id ---"+postSnapshot.getKey());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
})
Explaining the above listener. It will give you the
DataSnapShot
Object for your every user who is falling inside your child "users". You can access Push id bygetKey()
method.
firebaser(和 FirebaseUI 适配器的作者)在这里
已经有很多好的答案了。我确实通常建议创建一个代表您的数据对象的 Java class。
但是如果您打算使用 DataSnapshot
,您可以覆盖 FirebaseRecyclerAdapter.parseSnapshot
来处理 "conversion":
@Override
protected ChatMessage parseSnapshot(DataSnapshot snapshot) {
return snapshot;
}