2017-11-26 22 views
0

私は、人々が自分の位置を共有するのに役立つソーシャルアプリを開発しています。Android - (Firebase)ユーザー名を知らずにユーザー名でAutoCompleteTextViewを作成


私が経験してる問題は、私は私たちを推測する、これを行うことができるようにするために、他のユーザーProfile.Howeverを見つけるためにユーザーを助けるユーザー名とAutoCompleteTextViewを作成したいということですユーザーID


の子であるユーザーの名前に到達するためにユーザーIDを知っている必要がありますこれは私の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) { 

     } 
    }); 


} 

あなたonTextChnaged()ユーザーがsubSequence()と呼ばれる方法を使用することにより、リアルタイムで入力された文字を取得するには、問題を解決するために私を助けて事前のおかげで...

+0

ログインしているユーザーのuidが必要ですか?これは正しいです? –

+0

いいえ、そこに書いたように、AutoCompleteTextViewで書かれたユーザー名の名前をオートコンプリートしたいと考えています... – Tarlan

答えて

0

してください。このように:

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) { 

     } 

    }); 


} 

さて、このコードが何をしているかのは、単にユーザーが文字で文字を入力し、それに役立つ同じtime.Hopeでデータベースを照会するもの追跡することです。

を編集します。コード内にソリューションを実装するための初期回答を変更しました。方法initialAutoCompleteTV()を上記のコードに置き換えてください。

+0

このクエリを知りたいのですが、このクエリを作成するにはどうすればいいですか... @DevMike – Tarlan

+0

ソリューションを実装しましたあなたのために、あなたの 'initialAutoCompleteTV(){...}'メソッドを削除し、それを上記のコードに置き換えるだけです。 – DevMike

+0

魅力的なように働いています.... – Tarlan

関連する問題