【发布时间】:2019-04-16 14:10:37
【问题描述】:
这是我作为示例给出的 Firebase 数据库示例。这里我想做“+90 505 696 1234”值的电话号码和文本的值一起用recycler视图查询和排序值。我只是设法做到了。但不是我想要的方式。此电话号码将有两个或多个值。你可以在数据库中看到这个。
“+90 505 696 1234”:“A”和“+90 505 696 1234”:“AA”。当我质疑这个数字时,我想看到这个数据。但是我无法创建 CategoryItem 类,因为我的数据库名称是可变的。我不知道该怎么做。不会有固定的数据库名称。用户会查询不同的号码。如何为此创建 CategoryItem 类?
我的 Firebase 数据库
{
"ContactPhoneNumbers" : {
"-LcaHYcsoGA-VT8yvgGf" : {
"+90 505 696 1234" : "A",
"+90 506 854 2345" : "B",
"+90 530 408 3456" : "C",
"+90 535 966 4567" : "D",
"+90 536 782 5678" : "E",
"+90 546 934 67 89" : "F",
"+905304080001" : "G",
"+905316910002" : "H",
"+905359660003" : "I",
"+905367820004" : "J",
"+905425420005" : "K",
"+905469340006" : "L",
"05056960007" : "M"
},
"-LcaH_gtgarJwbY5-C08" : {
"+90 505 696 1234" : "AA",
"+90 506 854 2345" : "BB",
"+90 530 408 3456" : "CAC",
"+90 535 966 4567" : "AAA",
"+90 536 782 5678" : "CAB",
"+90 546 934 67 89" : "BB",
"+905304080001" : "A",
"+905316910002" : "BBB",
"+905359660003" : "DDD",
"+905367820004" : "EEE",
"+905425420005" : "FFF",
"+905469340006" : "L",
"05056960007" : "M"
}
}
}
我的活动
public class MainActivity extends AppCompatActivity {
EditText Search_Edit_Text;
Button Search_Button;
RecyclerView Search_Contact_List;
DatabaseReference mUserDatabase;
FirebaseRecyclerOptions<CategoryItem> options,options2;
FirebaseRecyclerAdapter<CategoryItem,CategoryViewHolder> adapter;
Query firebaseSearchQuery,asd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("ContactPhoneNumbers");
Search_Edit_Text = (EditText) findViewById(R.id.Search_Edit_Text);
Search_Button = (Button) findViewById(R.id.Search_Button);
Search_Contact_List = (RecyclerView) findViewById(R.id.Search_Contact_List);
Search_Contact_List.setHasFixedSize(true);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getBaseContext(),2);
Search_Contact_List.setLayoutManager(gridLayoutManager);
Search_Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String searchText = Search_Edit_Text.getText().toString().trim();
firebaseUserSearch(searchText);
}
});
}
private void firebaseUserSearch(final String searchText) {
firebaseSearchQuery = mUserDatabase.orderByChild(searchText).startAt("").endAt("" + "\uf8ff");
options2 = new FirebaseRecyclerOptions.Builder<CategoryItem>()
.setQuery(firebaseSearchQuery,CategoryItem.class)
.build();
adapter = new FirebaseRecyclerAdapter<CategoryItem, CategoryViewHolder>(options2) {
@Override
protected void onBindViewHolder(@NonNull final CategoryViewHolder holder, int position, @NonNull final CategoryItem model) {
Toast.makeText(MainActivity.this, model.getName(), Toast.LENGTH_SHORT).show();
}
@NonNull
@Override
public CategoryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_layout,parent,false);
return new CategoryViewHolder(itemView);
}
};
setCategory();
}
private void setCategory() {
adapter.startListening();
Search_Contact_List.setAdapter(adapter);
}
}
我的分类项目
这段代码完全是一个例子。当我将名称“字符串”写为字符串时,我需要在电话号码中创建一个名称。我不想要这个。我想查看对应电话号码的值。
public class CategoryItem {
public String name ;
public CategoryItem() {
}
public CategoryItem(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
【问题讨论】:
-
我的数据库名称是可变的 为什么?您是否在每个数据库中随机排列数据?
-
数据库名称是随机的。但我想查询数据库名称。例如,当我查询“155”时,我希望它给出“警察”。我想为此创建一个类。 @B001ᛦ
-
数据库名称将是随机的... 对我来说没有意义。听起来像一个 XY 问题
-
@B001ᛦ 他们的意思是每个数据库条目的键是不固定的(电话号码)。他们正在努力将下载的数据转换为可以使用的结构化 Java 类。
标签: java android firebase firebase-realtime-database