Java this.getApplication()).getQuery()始终返回null
大家下午好!我正在Android Studio中开发一个搜索系统,但我是Java语言的初学者,可能我的错误很愚蠢。我想帮助理解两件事。第一:为什么我不能访问Java this.getApplication()).getQuery()始终返回null,java,android,searchview,Java,Android,Searchview,大家下午好!我正在Android Studio中开发一个搜索系统,但我是Java语言的初学者,可能我的错误很愚蠢。我想帮助理解两件事。第一:为什么我不能访问this.getApplication()).setQuery(查询)在onquerytexsubmit中,然后第二次提交。为什么要将HomeActivity.this.getApplication()放在最后,它不确认错误,也不访问loadFirstPage中的查询的值 ((MyApplication) this.getApplicatio
this.getApplication()).setQuery(查询)代码>在onquerytexsubmit
中,然后第二次提交。为什么要将HomeActivity.this.getApplication()
放在最后,它不确认错误,也不访问loadFirstPage
中的查询的值
((MyApplication) this.getApplication()).setQuery(null);
// listening to search query text change
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// loadFirstPage(builder,query);
((MyApplication) HomeActivity.this.getApplication()).setQuery(query);
return false;
}
@Override
public boolean onQueryTextChange(String query) {
// loadFirstPage(builder,query);
((MyApplication) HomeActivity.this.getApplication()).setQuery(query);
return false;
}
});
String s = ((MyApplication) this.getApplication()).getQuery();
loadFirstPage(builder,s);
return true;
}
提前感谢您应该分析您的代码流。如果代码启动,则设置侦听器(图中的1.和2.),但不会调用它们。(您只设置了它们…)
之后,将执行getQuery
,它返回null
,因为在getQuery
之前没有调用您的onquerytexsubmit
和onquerytexchange
如果您的侦听器被触发,那么查询将被设置,但是getQuery
的执行以前就已经完成了
如果需要查询,您可以添加一个按钮,并在按下按钮时执行getQuery
的代码。
在您的情况下,我认为最好的方法是在第一次启动时使用常量值初始化s
。字符串s
将在这两个方法执行之前填充。这些是事件触发的方法。只需添加一个System.out.println
方法,查看onQueryText###
何时执行。这确实是一个愚蠢的错误:侦听器是异步编程模型的标志,Android非常使用它。当使用异步编程概念时,您不能再自上而下地阅读代码。非常感谢您的解释!我从每个人的答案中学到了很多,不幸的是我没有投票分数,但非常感谢!