android - 使用 onClick 侦听器在 Firebase Null 中搜索
问题描述
我正在尝试在我的 firebase 数据库中搜索信息,但我无法这样做。
这是我从中搜索的课程:
private FirebaseRecyclerAdapter<DjProfile, ResultsViewHolder> firebaseRecyclerAdapter;
public static Query query;
public static String searchData;
DatabaseReference mProfileDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_attendee_landing);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final RecyclerView recyclerView = findViewById(R.id.results_recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
final EditText t = (EditText) findViewById(R.id.DjNameET);
mProfileDatabase = FirebaseDatabase.getInstance().getReference();
t.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
if(i == EditorInfo.IME_ACTION_SEARCH)
{
searchData = t.getText().toString();
return true;
}
return false;
}
});
ImageButton imgB= (ImageButton) findViewById(R.id.searchBtn);
imgB.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view)
{
query = mProfileDatabase.orderByChild("djprofile")
.startAt(searchData)
.endAt(searchData + "\uf8ff");
}
});
FirebaseRecyclerOptions<DjProfile> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<DjProfile>()
.setQuery(query, DjProfile.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DjProfile, ResultsViewHolder>(firebaseRecyclerOptions)
{
@NonNull
@Override
public ResultsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.searchitem_list, viewGroup, false);
return new ResultsViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull ResultsViewHolder holder, int position, @NonNull DjProfile model) {
holder.setDjProfile(model);
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
}
@Override
protected void onStart()
{
super.onStart();
firebaseRecyclerAdapter.startListening();
}
这是我得到的异常:(说发生在 onStart() 方法中)
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'com.google.firebase.database.ChildEventListener com.google.firebase.database.Query.addChildEventListener(com.google.firebase.database.ChildEventListener)'
任何关于为什么这是 null 的帮助将不胜感激!
解决方案
为了能够初始化适配器,您需要有一个有效的查询。为了能够创建查询,您需要拥有searchData
. 这意味着 的初始化firebaseRecyclerAdapter
应该发生在onClick
.
imgB.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view)
{
query = mProfileDatabase.orderByChild("djprofile")
.startAt(searchData)
.endAt(searchData + "\uf8ff");
FirebaseRecyclerOptions<DjProfile> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<DjProfile>()
.setQuery(query, DjProfile.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DjProfile, ResultsViewHolder>(firebaseRecyclerOptions)
{
@NonNull
@Override
public ResultsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.searchitem_list, viewGroup, false);
return new ResultsViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull ResultsViewHolder holder, int position, @NonNull DjProfile model) {
holder.setDjProfile(model);
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
}
});
推荐阅读
- java - 如何通过本地计算机远程连接 Apache 服务器(http://149.4.223.238:8080)
- routing - Angular 6-在第三方服务器进行身份验证后维护页面加载
- parsing - 您如何在 x86-64 程序集中的字符串中找到一个字符?
- c# - WPF:将 ControlTemplate 与占位符文本框一起使用时,将焦点移到上一个控件(SHIFT + Tab)
- vespa - 是否可以在 Vespa 中运行 cron 作业?
- debugging - Visual Studio 2017 - 是否可以同时为调试和发布配置设置预处理器定义?
- axios - 如何设置 HTTP 标头 win axios.interceptors?
- excel - 正确编码构造函数
- android - 为 x86 和 x86_64 构建 Flutter 应用程序
- katalon-studio - Katalon:如何在另一个测试用例中使用一个测试用例的结果?