我已经上传到数据库示例JSON并自定义一个值只是为了看到代码被执行意味着确保我的查询获得匹配并返回对象。 所以这是我的实现。
Query personQuery = myRef.orderByChild("mCalculateLeftEyeSizeWidth")
.startAt(mCalculateLeftEyeSizeWidth())
.limitToFirst(1);
personQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if(dataSnapshot.exists()){
Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
Person person = dataSnapshot.getValue(Person.class);
Log.d(TAG,"Person name:" + person.getName());
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
if(dataSnapshot.exists()) {
Log.d(TAG, "onChildChanged:" + dataSnapshot.getKey());
Person person = dataSnapshot.getValue(Person.class);
Log.d(TAG, "Person name:" + person.getName());
}
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()) {
Log.d(TAG, "onChildRemoved:" + dataSnapshot.getKey());
}
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
if(dataSnapshot.exists()) {
Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "DatabaseError:" + databaseError.getMessage());
}
});
如果我正在运行debug After Analyze image,我会看到查询在这里执行所有操作:
Query personQuery = myRef.orderByChild("mCalculateLeftEyeSizeWidth")
.startAt(mCalculateLeftEyeSizeWidth())
.limitToFirst(1);
正确计算,我正在查看调试personQuery,一切似乎都没问题。
但是当我转到下一部分时:personQuery.addChildEventListener
它跳过它并且我的整个函数执行结束。 我应该在这里期待什么? 它现在听取每一个变化吗? 即使我手动确定存在相同的值,它是否意味着找不到匹配? 我是否需要实际上传另一个JSON文件以触发onChildAdded或onChildChanged?
我的逻辑是允许用户拍照。我的应用程序进行人脸识别,进行数学计算,然后查询Firebase数据库以根据值查找匹配项,并假设将人物对象返回到Android设备进行演示。 移动设备只进行查询和返回匹配,它不会用新记录更新数据库,这是我手动完成的。 所以我不确定“Listen”部分是否会触发。