构建apk后出现的错误
生成签名的apk后,操作栏视图(共享操作提供程序和searchview)崩溃。当调试从Android Studio中的应用程序它的工作,但是当我生成签署APK安装应用设备我得到象这样的错误:构建apk后出现的错误
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SearchView.setQueryHint(java.lang.CharSequence)' on a null object reference
at tm.veriloft.ertir.ui.SearchActivity.onCreateOptionsMenu(Unknown Source)
at android.app.Activity.onCreatePanelMenu(Activity.java:2820)
at android.support.v4.app.o.onCreatePanelMenu(Unknown Source)
at android.support.v7.app.e.a(Unknown Source)
at android.support.v7.app.g.a(Unknown Source)
at android.support.v7.widget.as.a(Unknown Source)
at android.support.v7.internal.a.a.j(Unknown Source)
at android.support.v7.internal.a.b.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
或
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.ah.a(android.content.Intent)' on a null object reference
at tm.veriloft.ertir.ui.BlogViewActivity.onCreateOptionsMenu(Unknown Source)
at android.app.Activity.onCreatePanelMenu(Activity.java:2820)
at android.support.v4.app.o.onCreatePanelMenu(Unknown Source)
at android.support.v7.app.e.a(Unknown Source)
at android.support.v7.app.g.a(Unknown Source)
at android.support.v7.widget.as.a(Unknown Source)
at android.support.v7.internal.a.a.j(Unknown Source)
at android.support.v7.internal.a.b.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
我使用的是支持库的最后版本和工具栏。 (通过设定setSupportActionBar(mToolbar)
)。
搜索查看XML:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ertir="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:title="@string/title_activity_search"
ertir:showAsAction="always"
ertir:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
的Java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) searchItem.getActionView();
mSearchView.setQueryHint(getString(R.string.search_hint));
mSearchView.setFocusable(true);
mSearchView.setIconified(false);
mSearchView.requestFocusFromTouch();
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
mSearchView.clearFocus(); //Hide keyboard
search(query, searchTypeArray.get(searchTypeSpinner.getSelectedItemPosition()).getType());
return false;
}
@Override
public boolean onQueryTextChange(String query) {
if (searchTypeArray.get(searchTypeSpinner.getSelectedItemPosition()).getType().equals("blogs"))
searchAfter(1100, query, searchTypeArray.get(searchTypeSpinner.getSelectedItemPosition()).getType());
else
search(query, searchTypeArray.get(searchTypeSpinner.getSelectedItemPosition()).getType());
return false;
}
});
return true;
}
我怎样才能解决这个问题?就像上面说的,我只有在签署apk之后才会出错。
发生这种情况的原因是您尚未适当配置您的progaurd
。在你的build.gradle
下buildTypes
和'释放'改变runProguard true
到runProguard false
并生成烧焦APK和测试。如果运行良好,请尝试学习正确配置progaurd :)
在proguard-rules.pro中,添加以下行以排除SearchView类:012ke'-keep class android.support.v7.widget。** { *; }'然后创建构建。我是这样解决的。
谢谢你的男人,你救了我的一天,我正准备放弃proguard因为这个错误:) – 2016-01-10 17:08:19
一个比只是禁用proguard更好的答案。非常感谢你! – 2016-08-03 20:21:25
谢谢,非常有帮助。 – user3910670 2017-11-20 17:01:20
这对我的作品,
添加以下行proguard-rules.pro位于应用程序文件夹中的文件:
-keep类android.support.v7.widget.SearchView {*; }
可能重复[什么是空指针异常,以及如何解决它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-我怎么办 - 修复它) – 323go 2014-12-06 19:36:00
找出什么'null'并确保它不是。 – 323go 2014-12-06 19:36:21
@ 323go我知道'(SearchView)searchItem.getActionView();'返回null。但我不知道为什么我在生成apk..not后得到这个错误..当调试 – alashow 2014-12-06 19:38:45