我希望用户在表单中输入姓氏,并自动向用户提供姓氏的帐号。帐户ID存储在Firebase表中。但是onEditorAction
不允许我粘贴onDataChange
功能。此处不允许@Override
触发器和#34;注释。"知道如何让onEditorAction
与onDataChange
合作吗?
这是我失败的代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ehrRef = rootRef.child("ehr");
mFirstName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_DONE) {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Boolean found;
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String ehrLastName = ds.child("lastNameEHR").getValue(String.class);
found = ehrLastName.contains(mLastName.getText().toString());
if (found) {
mUserIdBackPainHistory.setText(ds.child("userIdEHR").getValue(String.class));
}
}
}
handled = true;
}
return handled;
}
});
答案 0 :(得分:0)
onDataChange
方法是ValueEventListener
接口的一部分。您无法简单地添加该方法,而无需将其声明为界面的一部分。
mFirstName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_DONE) {
ehrRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Boolean found;
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String ehrLastName = ds.child("lastNameEHR").getValue(String.class);
found = ehrLastName.contains(mLastName.getText().toString());
if (found) {
mUserIdBackPainHistory.setText(ds.child("userIdEHR").getValue(String.class));
}
}
public void onCanceled(DatabaseError error) {
throw error.toException();
}
}
}
handled = true;
}
return handled;
}
});
此处的关键是ehrRef.addListenerForSingleValueEvent(new ValueEventListener() {
,它会为您的参考添加一个监听器。这将开始加载数据,并在加载数据时调用onDataChange
。