如何在FireData的onDataChange上使用onEditorAction

时间:2018-06-18 19:44:03

标签: android firebase firebase-realtime-database

我希望用户在表单中输入姓氏,并自动向用户提供姓氏的帐号。帐户ID存储在Firebase表中。但是onEditorAction不允许我粘贴onDataChange功能。此处不允许@Override触发器和#34;注释。"知道如何让onEditorActiononDataChange合作吗?

这是我失败的代码:

    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;
        }
    });

1 个答案:

答案 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