gpt4 book ai didi

android - 如何编写 Firebase 查询来过滤掉数据?

转载 作者:行者123 更新时间:2023-11-30 00:39:13 24 4
gpt4 key购买 nike

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

firebase json object

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

}
}

最佳答案

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

  • 它是基于 NoSQL 的数据存储,因此您必须相应地构建数据。
  • Firebase 允许您将节点嵌套到数据结构中,最多 32 层,这很容易被滥用

我认为您手头的问题是“拥有一个允许用户搜索您的用户用户名EditText

我建议您如何通过像这样扁平化数据结构来解决这个问题

enter image description here您可以在 usernames 数组中包含对象。每个对象的键是 username,值是另一个带有 empty-key : "" 的对象,就像这样。

然后您可以拥有另一个 users 数组,其中的键同样是 usernames,其余数据作为其下的对象存在。

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

一旦知道选择了哪个 username,就可以查询 users 以从数组中获取确切的 user

关于android - 如何编写 Firebase 查询来过滤掉数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42811888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com