【问题标题】:Android - (Firebase) Create AutoCompleteTextView with Users Name without knowing usersIDAndroid - (Firebase) 在不知道用户 ID 的情况下使用用户名创建 AutoCompleteTextView
【发布时间】:2017-11-26 18:29:00
【问题描述】:

我正在开发一款社交应用,可以帮助人们分享他们的位置。


我遇到的问题是我想创建一个 AutoCompleteTextView with Users Name 这将帮助用户找到其他用户的个人资料。但是,为了能够做到这一点,我想我们应该知道 UserID 以到达 User's name,它是 UserID

的孩子

这是我的 Firebase 数据库结构图片

我尝试的方式只帮助我自动完成用户 ID,这对我没有帮助。


private void initialAutoCompleteTV() {


    SearchPeopleAutoComp.addTextChangedListener(new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
        {

            //This is where I do the filtering as the user types

            if (!TextUtils.isEmpty(charSequence.toString())) {
                pullOutTagsSuggestions(charSequence.toString());
            }


        }

        @Override
        public void afterTextChanged(Editable editable) {

        }

    });


}

@SuppressWarnings("unchecked")
public void pullOutTagsSuggestions(final String text) {

    final  ArrayList<String> suggestions = new ArrayList<>();

    Query tagsReferences =  FirebaseDatabase.getInstance().getReference().child("Users").orderByKey().startAt(text).endAt((text)+ "\uf8ff");
    tagsReferences.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Log.v("TAGTAGTAG",dataSnapshot.toString());

            if (dataSnapshot != null) {

                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    String name = (String) ds.getKey();
                    suggestions.add(name);
                }

                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.select_dialog_item, suggestions);
                SearchPeopleAutoComp.setAdapter(arrayAdapter);
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


}

请帮我解决问题,在此先感谢...

【问题讨论】:

  • 所以你想要登录用户的uid?这是正确的吗?
  • 不,正如我在那里写的那样,我想在 AutoCompleteTextView 中自动完成所写用户名的名称...

标签: android firebase firebase-realtime-database


【解决方案1】:

在您的onTextChnaged() 中使用称为subSequence() 的方法实时获取用户正在输入的字符。像这样:

private void initialAutoCompleteTV() {


    SearchPeopleAutoComp.addTextChangedListener(new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
        {

            //This is where I do the filtering as the user types


            if (!TextUtils.isEmpty(charSequence.subSequence(0, charSequence.length()).toString())) {
                pullOutTagsSuggestions(charSequence.subSequence(0, charSequence.length()));
            }

        }

        @Override
        public void afterTextChanged(Editable editable) {

        }

    });


}

现在这段代码所做的是它只是跟踪用户逐个字符输入的内容并同时查询数据库。希望对您有所帮助。

编辑:我已经修改了最初的答案以在您的代码中实施解决方案。用上面的代码替换你的方法initialAutoCompleteTV()

【讨论】:

  • 我想在那里知道这个查询,我怎样才能创建这个查询...@DevMike
  • 我已经为你实现了解决方案,你需要做的就是删除你的initialAutoCompleteTV(){...}方法并用上面的代码替换它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
相关资源
最近更新 更多