【问题标题】:Nullpointerexception only in signed APKNullpointerexception 仅在签名的 APK 中
【发布时间】:2017-05-06 15:38:23
【问题描述】:

我有一个包含以下代码的片段:

SearchView searchView;

    @Override
    public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.searchship, menu);

        MenuItem searchItem = menu.findItem(R.id.action_search);

        searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    menu.findItem(R.id.action_sort).setVisible(false);

            }
        });

如果我从 AndroidStudio 运行它,那么一切都很好。但是从 Playstore 下载应用程序的每个人都会崩溃:

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SearchView.setOnSearchClickListener(android.view.View$OnClickListener)' on a null object reference

【问题讨论】:

  • 你使用过 ProGuard 吗?你测试你的发布版本了吗? (另外:每个应用程序都已“签名”,否则您无法安装)
  • 是的,这就是我的意思,如果它被混淆它就不起作用。
  • 我确信这总是有效的。 https://stackoverflow.com/a/71690782/6037561

标签: android nullpointerexception searchview


【解决方案1】:

这是我发现的:

我要补充

-keep class android.support.v7.widget.SearchView { *; }

到 proguard.pro

【讨论】:

    【解决方案2】:

    下面的代码正在运行

    -keep class android.support.v7.widget.SearchView { *; }
    

    【讨论】:

    • 请解释一下!
    • 我在使用 SearchView 时遇到了一个奇怪的问题,它在模拟器和独立 apk 中正常工作。但是当我签署apk并上传到Play商店时,用户得到了一个空指针异常。在我将上面的代码添加到proguard之后,它就可以正常工作了。
    • 它与 JDoe 的回答有何不同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    相关资源
    最近更新 更多