gpt4 book ai didi

java - 火力地堡 : How to search all objects with same value in whole database or nested database

转载 作者:行者123 更新时间:2023-11-29 23:16:12 25 4
gpt4 key购买 nike

如何获取具有相同 name_mov 的所有对象来自嵌套数据库的值。我有一个 EditText从那里我得到一个字符串来搜索具有相同 mov_name 的对象来自嵌套数据库的值。我想显示 bolly/new 下所有对象的列表还有bolly/popular与相同mov_name RecyclerView 中的值使用 Firebase-UI。

这是数据库结构:

enter image description here

我做了什么-

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


progressBar = findViewById(R.id.spin_search);
progressBar.setVisibility(View.GONE);
recyclerView = findViewById(R.id.rec_search);

recyclerView.setLayoutManager(new LinearLayoutManager(this));

editText = findViewById(R.id.ed_search);
editText.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) {
firebaseSearch(s.toString());
}

@Override
public void afterTextChanged(Editable s) {

}
});

mFirebaseDatabase = FirebaseDatabase.getInstance();
mDatabaseReference = mFirebaseDatabase.getReference();
}


//search data
private void firebaseSearch(String s) {
/*Toast.makeText(AllUserActivity.this, "Started Search", Toast.LENGTH_LONG).show();*/
progressBar.setVisibility(View.VISIBLE);


Query firebaseSearchQuery = mDatabaseReference.equalTo(s);

//set Options
FirebaseRecyclerOptions<MovieObj> options =
new FirebaseRecyclerOptions.Builder<MovieObj>()
.setQuery(firebaseSearchQuery, MovieObj.class)
.setLifecycleOwner(this)
.build();


adapter = new FirebaseRecyclerAdapter<MovieObj, SearchMovHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull SearchMovHolder holder, int position, @NonNull MovieObj model) {

progressBar.setVisibility(View.GONE);


holder.name.setText(model.getName_mov());
holder.rating.setText( model.getRating());
holder.year.setText( model.getYear());

Glide.with(holder.img_back.getContext())
.load(model.getImgback())
.into(holder.img_back);


}

@NonNull
@Override
public SearchMovHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_mov_item, parent, false);
return new SearchMovHolder(mView);
}


};

recyclerView.setAdapter(adapter);
}

最佳答案

使用数据库结构无法实现此目的,因为在根节点和包含 name_mov 属性的对象之间有 4 个子节点,movbollynew 和推送的 id。

您可以使用以下查询:

Query firebaseSearchQuery = mDatabaseReference
.child("mov")
.child("bolly")
.child("new")
.orderByChild("name_mov")
.equalTo(s);

但是您将只能获取存在于 new 节点中的电影片名。如果你想获得所有的标题,你应该通过添加电影类型(新的、流行的等等)作为你的对象的属性来重组你的数据库,然后简单地使用:

Query firebaseSearchQuery = mDatabaseReference
.child("mov")
.child("bolly")
.orderByChild("name_mov")
.equalTo(s);

通过这种方式,您将拥有更少的级别,并且查询将完美无缺地工作。

关于java - 火力地堡 : How to search all objects with same value in whole database or nested database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320958/

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