android - 如何检查 Firebase 中的现有数据?
问题描述
以上是我的firebase节点树。这是我的代码:
private fun attemptAdd(){
var focus: View? = null
var cancel: Boolean = false
var prefix: String = prePrefView.text.toString() + prefText.text.toString()
var sp: SimPrefix
//checks for the length of the input
if(prefText.length()<2){
prefText.error = "invalid length"
cancel = true
focus = prefText
}
mDatabaseReference.child("simnumbers")
.orderByChild("simPref")
.equalTo(prefix)
.addListenerForSingleValueEvent(object : ValueEventListener{
override fun onDataChange(dataSnapshot: DataSnapshot) {
dataSnapshot.children.forEach {
sp = it.getValue(SimPrefix::class.java)!!
if(sp.simCard.equals(prefix)){ //checks if there is already a node with the same data
prefText.error = "already exists"
cancel = true
focus = prefText
}
}
}
override fun onCancelled(p0: DatabaseError?) {
}
})
if(cancel){
focus?.requestFocus()
}
else{ //if all is valid, proceed to the next method.
addPrefix()
}
}
我在这里假设它似乎没有进入侦听器,因为它总是进入下一个方法,允许用户输入相同的现有数据。
解决方案
我提供了 java 代码,您可以将其更改为 kotlin,并将您的条件放入 onDatachange 方法中。
Query query1=reference.child(reference.getKey()).child("simnumbers").orderByChild("simPref").equalTo(prefix);
query1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// here place your condition
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
推荐阅读
- spring-boot - Spring Boot 2.0.x - @Configuration 类 @Autowired entityManagerFactory NullPointerException
- sql-server - SQL Server 标量 UDF
- javascript - “成功 callbackId 错误:FirebasePlugin223329663:TypeError:无法读取属性 'navCtrl' of null”
- c - 如何在 C 函数中返回“realloc”数组
- reactjs - React + React Native 在同一个项目中
- java - 正则表达式与目标不匹配
- angular - “.../node_modules/rxjs/Rx”没有导出的成员 'throwError'
- java - 为什么 Long.valueOf(stateMap.get("time")) 使用 Base64 加密时给出 java.lang.ClassCastException
- ios - 在新 ViewController 中隐藏 tabBar 时的 iOS 自动布局问题
- ios - iOS Swift - URLSession.dataTask 在第一次调用后不调用回调方法