Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何编写Firebase查询以过滤数据?_Android_Firebase_Firebase Realtime Database_Firebaseui - Fatal编程技术网

Android 如何编写Firebase查询以过滤数据?

Android 如何编写Firebase查询以过滤数据?,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我想编写一个查询,以便使用edittext筛选数据,下面的代码可以工作,但会带来所有不需要的搜索数据。你能帮帮我吗?JSON对象如下:我想过滤掉的数据是用户名 public class SearchActivity extends AppCompatActivity { ListView searchList; DatabaseReference databaseReference; FirebaseListAdapter<SearchDetails> listAdapter; S

我想编写一个查询,以便使用edittext筛选数据,下面的代码可以工作,但会带来所有不需要的搜索数据。你能帮帮我吗?JSON对象如下:我想过滤掉的数据是用户名

public class SearchActivity extends AppCompatActivity {

ListView searchList;
DatabaseReference databaseReference;
FirebaseListAdapter<SearchDetails> listAdapter;
String search;
EditText editTextSearch;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);

    searchList = (ListView) findViewById(R.id.listViewSearch);
    databaseReference = FirebaseDatabase.getInstance().getReference().child("Search Users");

    editTextSearch = (EditText) findViewById(R.id.editTextSearch);


    editTextSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            search = editTextSearch.getText().toString();
            if (search.equals("")){
                searchList.setAdapter(null);
            }else{
                searchList.setAdapter(listAdapter);
            }
        }
    });

    Query query = databaseReference.startAt(search).endAt(search+"~").limitToFirst(10);
    listAdapter = new FirebaseListAdapter<SearchDetails>(
            this,
            SearchDetails.class,
            R.layout.search_layout,
            query
    ) {
        @Override
        protected void populateView(View v, SearchDetails model, int position) {
            TextView username = (TextView) v.findViewById(R.id.textViewUsername);
            username.setText(model.getUsername());
            TextView name = (TextView) v.findViewById(R.id.textViewName);
            name.setText(model.getName());
        }
    };

}
}

公共类SearchActivity扩展了AppCompatActivity{
列表视图搜索列表;
数据库参考数据库参考;
FirebaseListAdapter;
字符串搜索;
编辑文本编辑文本搜索;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u search);
searchList=(ListView)findViewById(R.id.listViewSearch);
databaseReference=FirebaseDatabase.getInstance().getReference().child(“搜索用户”);
editTextSearch=(EditText)findViewById(R.id.editTextSearch);
editTextSearch.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
}
@凌驾
公共无效后文本已更改(可编辑){
search=editTextSearch.getText().toString();
if(search.equals(“”){
searchList.setAdapter(null);
}否则{
searchList.setAdapter(listAdapter);
}
}
});
Query Query=databaseReference.startAt(search).endAt(search+“~”).limitToFirst(10);
listAdapter=新的FirebaseListAdapter(
这
SearchDetails.class,
R.layout.search_布局,
查询
) {
@凌驾
受保护的void populateView(视图v、SearchDetails模型、int位置){
TextView用户名=(TextView)v.findViewById(R.id.textViewUsername);
username.setText(model.getUsername());
TextView名称=(TextView)v.findViewById(R.id.textViewName);
name.setText(model.getName());
}
};
}
}

Query Query=databaseReference.orderByChild(“用户名”).startAt(搜索).endAt(搜索+“~”).limitToFirst(10)

为了解决这个问题,我们需要了解有关Firebase的一些事情,很多开发人员可能会忽略这些事情

  • 它是基于NoSQL的数据存储,因此您必须相应地构造数据
  • Firebase允许您在数据结构中嵌套多达32层的节点,这很容易被滥用
我认为您手头的问题是“有一个
EditText
,允许用户搜索您的用户的用户名

我建议您如何解决这一问题,就是将数据的结构扁平化,就像这样

您可以在
用户名
数组中包含对象。每个对象的键是
用户名
,值是另一个具有
空键的对象:“
类似于此

然后,您可以拥有另一个
用户数组
,其中键是
用户名
,其余数据作为一个对象存在于其下

现在,您可以轻松地在
用户名上运行筛选查询,而不必担心在该查询中获取不必要数据的开销


一旦你知道选择了哪个
用户名
,你就可以查询
用户
,从数组中获取准确的
用户

你能具体说明一下,你想获取什么数据吗?这个问题对我来说不是很清楚。我只想过滤掉用户名Hey@Jama我在下面为你添加了一个答案,如果是帮助和/或您想了解更多信息。很抱歉,它不起作用,它带来了所有不需要的数据