Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java this.getApplication()).getQuery()始终返回null_Java_Android_Searchview - Fatal编程技术网

Java this.getApplication()).getQuery()始终返回null

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

大家下午好!我正在Android Studio中开发一个搜索系统,但我是Java语言的初学者,可能我的错误很愚蠢。我想帮助理解两件事。第一:为什么我不能访问
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非常使用它。当使用异步编程概念时,您不能再自上而下地阅读代码。非常感谢您的解释!我从每个人的答案中学到了很多,不幸的是我没有投票分数,但非常感谢!