我正在按照文档在 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); } });}即使我序列化这些类,当我增加计数器时,我仍然在他们的代码中得到一个异常Shard shard = transaction.get(shardRef).toObject(Shard.class);编译器抱怨 Shard 类中没有无参数构造函数。我在这里不知所措,因为这是我能找到的唯一文档。有没有人成功实施过这个并知道我在这里可能会遗漏什么?
1 回答
![?](http://img1.sycdn.imooc.com/54584de700017cbd02200220-100-100.jpg)
白猪掌柜的
TA贡献1893条经验 获得超10个赞
正如错误消息所说,您的 Shard 类没有无参数构造函数。JavaBean 类型类必须有一个无参数构造函数,以便它被不能完全理解其他构造函数做什么的代码实例化。因此,您应该在代码中添加一个无参数构造函数:
public class Shard {
int count;
public Shard() {} // this constructor has no arguments
public Shard(int count) {
this.count = count;
}
}
如果没有该构造函数,Firestore SDK 就无法以可预测的方式创建Shard.
添加回答
举报
0/150
提交
取消