NullPointerException возникает при активации proguard - PullRequest
0 голосов
/ 16 июня 2020

Когда я устанавливаю minifyenabled = true, я получаю NullPointerException в какой-то части моего приложения.

Вот ошибка.

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
    at application.screens.g.b.a$d$1.a(SourceFile:97)
    at application.a.p$b.onClick(SourceFile:31)
    at android.view.View.performClick(View.java:6605)

Цель состоит в том, чтобы открыть фрагмент списка городов при нажатии текстовое представление из фрагмента и отображать его в текстовом представлении, когда оттуда выбирается город. Когда я выбираю город из citylistfragment, textviewe выдает ошибку при установке данных. Но ошибка возникает только при открытии прогарда.

txtRegion.setOnClickListener {  event ->

            FragmentHelper.addFragment(
                    activity!!.supportFragmentManager,
                    CityListFragment.newInstance(regions, object : RegionListener {
                        override fun onRegionSelected(region: Region?) {
                            spinnerRegion.setText(region!!.name)
                            Toast.makeText(context, regions!!.indexOf(region).toString(),Toast.LENGTH_LONG).show()
                            activity?.onBackPressed()
                        }
                    }, R.string.search_neigbourhood)
            )
        true
    }

CityListFragment:

private fun setRegionListAdapter(regions: ArrayList<Region>?) {
    rvRegionList?.layoutManager = LinearLayoutManager(
            activity,
            LinearLayoutManager.VERTICAL,
            false
    )
    if (regions != null) {
        rvRegionList?.adapter = RegionListAdapter(regions, regionListener, context!!)
    }
}

companion object {
    @JvmStatic
    fun newInstance(regions: ArrayList<Region>?, regionListener: RegionListener, searchHint: Int? = null) =
            CityListFragment(regionListener).apply {
                arguments = Bundle().apply {
                    putParcelableArrayList(ARG_REGION, regions)
                    if (searchHint != null) {
                        putInt(ARG_SEARCH_HINT, searchHint)
                    }
                }
            }
}

Адаптер:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.name.text = dataList[position].name
    holder.container.setOnClickListener {
        regionListener.onRegionSelected(dataList[position])
    }
}

Proguard:

<p>

    -dontwarn com.alibaba.fastjson.**

    #Use 5 step of optimization
    #-optimizationpasses 5

    #When not preverifing in a case-insensitive filing system, such as Windows. This tool will unpack your processed jars,(if using windows you should then use):
    -dontusemixedcaseclassnames

    #Specifies not to ignore non-public library classes. As of version 4.5, this is the default setting
    -dontskipnonpubliclibraryclasses

    # Optimization is turned off by default. Dex does not like code run
    # through the ProGuard optimize and preverify steps (and performs some
    # of these optimizations on its own).
    -dontoptimize
    -dontpreverify

    -dontwarn android.support.**

    #Specifies to write out some more information during processing. If the program terminates with an exception, this option will print out the entire stack trace, instead of just the exception message.
    -verbose

    #The -optimizations option disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. Note that the Dalvik VM also can't handle aggressive overloading (of static fields).
    #To understand or change this check http://proguard.sourceforge.net/index.html#/manual/optimizations.html
    #-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

    # Note that if you want to enable optimization, you cannot just
    # include optimization flags in your own project configuration file;
    # instead you will need to point to the
    # "proguard-android-optimize.txt" file instead of this one from your
    # project.properties file.

    #To repackage classes on a single package
    #-repackageclasses ''

    #Uncomment if using annotations to keep them.
    #-keepattributes *Annotation*

    #Keep classes that are referenced on the AndroidManifest
    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Application
    -keep public class * extends android.app.Service
    -keep public class * extends android.content.BroadcastReceiver
    -keep public class * extends android.content.ContentProvider
    -keep public class * extends android.app.backup.BackupAgentHelper
    -keep public class * extends android.preference.Preference
    -keep public class com.google.vending.licensing.ILicensingService
    -keep public class com.android.vending.licensing.ILicensingService
    #Compatibility library
    -keep public class * extends android.support.v4.app.Fragment
    -keep public class * extends android.app.Fragment

    -dontwarn com.google.android.material.**
    -keep class com.google.android.material.** { *; }

    -dontwarn androidx.**
    -keep class androidx.** { *; }
    -keep interface androidx.** { *; }

    -dontwarn android.support.v4.**
    -keep class android.support.v4.** { *; }

    -dontwarn android.support.v7.**
    -keep class android.support.v7.** { *; }

    #To maintain custom components names that are used on layouts XML.
    #Uncomment if having any problem with the approach below
    #-keep public class custom.components.package.and.name.**

    # keep setters in Views so that animations can still work.
    # see http://proguard.sourceforge.net/manual/examples.html#beans
     -keepclassmembers public class * extends android.view.View {
      void set*(***);
      *** get*();
    }

    #To remove debug logs:
    -assumenosideeffects class android.util.Log {
        public static *** d(...);
        public static *** v(...);
        public static *** w(...);
    }

    #To avoid changing names of methods invoked on layout's onClick.
    # Uncomment and add specific method names if using onClick on layouts
    #-keepclassmembers class * {
    # public void onClickButton(android.view.View);
    #}

    #Maintain java native methods
    -keepclasseswithmembernames class * {
        native ;
    }


    #To maintain custom components names that are used on layouts XML:
    -keep public class * extends android.view.View {
        public (android.content.Context);
    }
    -keep public class * extends android.view.View {
        public (android.content.Context, android.util.AttributeSet);
    }
    -keep public class * extends android.view.View {
        public (android.content.Context, android.util.AttributeSet, int);
    }

    #Maintain enums
    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }

    #To keep parcelable classes (to serialize - deserialize objects to sent through Intents)
    -keep class * implements android.os.Parcelable {
      public static final android.os.Parcelable$Creator *;
    }

    #Keep the R
    -keepclassmembers class **.R$* {
        public static ;
    }

     -ignorewarnings
    ###### ADDITIONAL OPTIONS NOT USED NORMALLY

    #To keep callback calls. Uncomment if using any
    #http://proguard.sourceforge.net/index.html#/manual/examples.html#callback
    #-keep class mypackage.MyCallbackClass {
    #   void myCallbackMethod(java.lang.String);
    #}

    #Uncomment if using Serializable
    #-keepclassmembers class * implements java.io.Serializable {
    #    private static final java.io.ObjectStreamField[] serialPersistentFields;
    #    private void writeObject(java.io.ObjectOutputStream);
    #    private void readObject(java.io.ObjectInputStream);
    #    java.lang.Object writeReplace();
    #    java.lang.Object readResolve();
    #}

    -dontwarn org.apache.commons.**
    -keep class org.apache.http.** { *; }
    -dontwarn org.apache.http.**

    -keep class com.google.android.gms.** { *; }
    -dontwarn com.google.android.gms.**

    -keep public class android.net.http.SslError
    -keep public class android.webkit.WebViewClient
    -keep public class android.widget.Spinner.** { *; }

    -dontwarn android.webkit.WebView
    -dontwarn android.net.http.SslError
    -dontwarn android.webkit.WebViewClient

    -dontwarn okio.**

    # For retrofit
    -dontwarn retrofit2.**
    -keep class retrofit2.** { *; }
    -keep class retrofit2.adapter.rxjava.RxJavaCallAdapterFactory { *; }
    -keepattributes Signature
    -keepattributes Exceptions
    -dontwarn java.lang.invoke.*

    -dontwarn com.squareup.okhttp.**

    -keepattributes *Annotation*
    -keep class okhttp3.** { *; }
    -keep interface okhttp3.** { *; }
    -dontwarn okhttp3.**
    -dontwarn okio.**

    -keepclasseswithmembers class * {
        @retrofit2.http.* ;
    }

    -dontwarn retrofit2.appengine.UrlFetchClient

    -keepclassmembers class * implements android.os.Parcelable {
        static ** CREATOR;
    }

    -keep class com.google.gson.** { *; }

    -keepclasseswithmembers class * {
        @retrofit.http.* ;
    }

    -keepclassmembernames interface * {
        @retrofit.http.* ;
    }

    -dontwarn retrofit2.Platform$Java8


    -keep class uk.co.chrisjenx.calligraphy.* { *; }
    -keep class uk.co.chrisjenx.calligraphy.*$* { *; }


    -keep class com.crashlytics.** { *; }
    -dontwarn com.crashlytics.**

    -keepattributes SourceFile,LineNumberTable

    -dontwarn dagger.internal.codegen.**
    -keepclassmembers,allowobfuscation class * {
        @javax.inject.* *;
        @dagger.* *;
        ();
    }

    -keep public class com.google.android.gms.* { public *; }
    -dontwarn com.google.android.gms.**

    -keep class dagger.* { *; }
    -keep class javax.inject.* { *; }
    -keep class * extends dagger.internal.Binding
    -keep class * extends dagger.internal.ModuleAdapter
    -keep class * extends dagger.internal.StaticInjection

    #Support V7
    -dontwarn android.support.v7.**
    -keep class android.support.v7.** { *; }
    -keep interface android.support.v7.** { *; }




    -keepclassmembers class fqcn.of.javascript.interface.for.webview {
       public *;
    }
    #
    # Uncomment this to preserve the line number information for
    # debugging stack traces.
    #
    # If you keep the line number information, uncomment this to
    # hide the original source file name.
    -renamesourcefileattribute SourceFile

    #For Dexter
    -keep class com.karumi.dexter.** { *; }
    -keep interface com.karumi.dexter.** { *; }
    -keepclasseswithmembernames class com.karumi.dexter.** { *; }
    -keepclasseswithmembernames interface com.karumi.dexter.** { *; }

    -keep public class * implements com.bumptech.glide.module.GlideModule
    -keep public class * extends com.bumptech.glide.module.AppGlideModule
    -keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
      **[] $VALUES;
      public *;
    }

</p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...