2017-10-06 3 views
0

Je reçois un plantage lorsque j'essaie d'obtenir une référence à une classe Custom SearchView dans onCreateOptionsMenu. Normalement, cela fonctionne bien, mais lors du chargement de la version apk, il se bloque. J'ai essayé d'ajouter ces lignes à mon proguard mais son plantage encore:Crash de Search SearchView lors de la version Release

# Android support 
-keep public class com.mine.mobile.mypackage.usercontrol.SearchViewCustom 
-keep class android.support.v7.** { *; } 
-keep interface android.support.v7.** { *; } 

Voici le code:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     mMenu = menu; 
     getMenuInflater().inflate(R.menu.menu_invest, menu); 
     final MenuItem searchItem = menu.findItem(R.id.action_invest_search); 

     if (searchItem != null) { 
      mSearchView = (SearchViewCustom) MenuItemCompat.getActionView(searchItem); 

      SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
      mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     } 

     mPresenter = new BaseActivityPresenterImpl(this,mSearchView,mMenu,searchItem); 
     mPresenter.setupActionBar(NONE,false); 

     return super.onCreateOptionsMenu(menu); 
    } 

Voici le journal

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.mine.mobile.mypackage.usercontrol.d.setSearchableInfo(android.app.SearchableInfo)' on a null object reference 
! 1 at com.mine.mobile.mypackage.activity.home.a.onCreateOptionsMenu(BaseActivity.java:94) 
2 at android.app.Activity.onCreatePanelMenu(Activity.java:3232) 
3 at android.support.v4.app.q.onCreatePanelMenu(FragmentActivity.java:362) 
4 at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:98) 
5 at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:335) 
6 at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:98) 
7 at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:454) 
8 at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:61) 
9 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) 
10 at android.view.Choreographer.doCallbacks(Choreographer.java:683) 
11 at android.view.Choreographer.doFrame(Choreographer.java:616) 
12 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) 
13 at android.os.Handler.handleCallback(Handler.java:751) 
14 at android.os.Handler.dispatchMessage(Handler.java:95) 
15 at android.os.Looper.loop(Looper.java:154) 
16 at android.app.ActivityThread.main(ActivityThread.java:6247) 
17 at java.lang.reflect.Method.invoke(Native Method) 
18 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872) 
19 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 

menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_delete" 
     android:title="@string/delete" 
     android:icon="@drawable/ic_delete_white" 
     app:showAsAction="always" /> 
    <item 
     android:id="@+id/action_done" 
     android:title="@string/done" 
     android:icon="@drawable/ic_done_white" 
     app:showAsAction="always" /> 
    <item 
     android:id="@+id/action_refresh" 
     android:icon="@drawable/ic_refresh_white" 
     android:visible="false" 
     android:title="@string/refresh_menu" 
     app:showAsAction="always" /> 
    <item 
     android:id="@+id/action_invest_search" 
     android:icon="@drawable/ic_search_white" 
     android:visible="false" 
     android:title="@string/action_search" 
     app:actionViewClass="com.mine.mobile.mypackage.usercontrol.SearchViewCustom" 
     app:showAsAction="always|collapseActionView" /> 
</menu> 

Ceci n'est pas un double de Qu'est-ce qu'un NullPointerException, et comment puis-je le réparer? ... cette question englobe une catégorie trop large

+0

pouvez-vous partager votre menu.xml –

+0

Ajouté menu.xml à la question – Mike6679

+0

Essayez d'utiliser le profileur apk dans Android Studio 3 pour voir si votre classe personnalisée est l'endroit où vous vous attendez à être et hasn » t été obfuscated à un nom différent – Kuffs

Répondre

0

J'étais sur la bonne voie, mais apparemment, ma syntaxe pro gard était incorrecte (j'ai utilisé l'exemple de google here:). Cela a fonctionné bien:

-keep public class com.mine.mobile.mypackage.usercontrol.SearchViewCustom { 
    public *; 
}