![](/img/trans.png)
[英]Firebase Firestore Distributed Counter - No Properties to Serialize Found
[英]Firebase Firestore Distributed Counter documentation code crashing
我正在按照文档在Firebase Firestore中创建分布式计数器,但是,我在其提供的代码上遇到了错误。
// counters/${ID}
public class Counter {
int numShards;
public Counter(int numShards) {
this.numShards = numShards;
}
}
// counters/${ID}/shards/${NUM}
public class Shard {
int count;
public Shard(int count) {
this.count = count;
}
}
在运行createCounter方法时,它们已定义
public Task<Void> createCounter(final DocumentReference ref, final int numShards) {
// Initialize the counter document, then initialize each shard.
return ref.set(new Counter(numShards))
.continueWithTask(new Continuation<Void, Task<Void>>() {
@Override
public Task<Void> then(@NonNull Task<Void> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
List<Task<Void>> tasks = new ArrayList<>();
// Initialize each shard with count=0
for (int i = 0; i < numShards; i++) {
Task<Void> makeShard = ref.collection("shards")
.document(String.valueOf(i))
.set(new Shard(0));
tasks.add(makeShard);
}
return Tasks.whenAll(tasks);
}
});
}
我只是得到一个运行时异常
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.enterprises.optaku.bvalyan.gametalk, PID: 8471
java.lang.RuntimeException: No properties to serialize found on class com.enterprises.optaku.bvalyan.gametalk.TopicVotingFragment$Counter
at com.google.firebase.firestore.g.zzg$zza.<init>(SourceFile:643)
at com.google.firebase.firestore.g.zzg.zza(SourceFile:331)
at com.google.firebase.firestore.g.zzg.zzb(SourceFile:152)
at com.google.firebase.firestore.g.zzg.zza(SourceFile:1085)
at com.google.firebase.firestore.UserDataConverter.convertPOJO(SourceFile:427)
at com.google.firebase.firestore.DocumentReference.set(SourceFile:165)
at com.enterprises.optaku.bvalyan.gametalk.TopicVotingFragment.createCounter(TopicVotingFragment.java:217)
at com.enterprises.optaku.bvalyan.gametalk.TopicVotingFragment.lambda$null$5$TopicVotingFragment(TopicVotingFragment.java:180)
即使我序列化类,当我增加计数器时,它们的代码中仍然会出现异常
Shard shard = transaction.get(shardRef).toObject(Shard.class);
编译器抱怨在Shard类中没有无参数的构造函数。
我不知所措,因为这是我能找到的唯一文档。 有人成功实现了这一点,知道我在这里可能会缺少什么吗?
如错误消息所述,您的Shard类没有无参数构造函数。 JavaBean类型类必须具有无参数构造函数,以便无法完全理解其他构造函数做什么的代码将其实例化。 因此,您应该在代码中添加一个无参数的构造函数:
public class Shard {
int count;
public Shard() {} // this constructor has no arguments
public Shard(int count) {
this.count = count;
}
}
没有该构造函数,Firestore SDK将无法以可预测的方式创建Shard
实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.