My app starts without any problem. But while I log in and the next activity is about to start the app crashes with following Exception:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:453)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:415)
at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:204)
at android.widget.Spinner.onMeasure(Spinner.java:602)
at android.view.View.measure(View.java:23169)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1187)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:706)
at android.view.View.measure(View.java:23169)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1168)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:706)
at android.view.View.measure(View.java:23169)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
at android.view.View.measure(View.java:23169)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:23169)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
at android.view.View.measure(View.java:23169)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:23169)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:461)
at android.view.View.measure(View.java:23169)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:716)
at android.view.View.measure(View.java:23169)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2718)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1572)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1855)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:696)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
What surprises me is that none of my classes or an external library appears. If I keep my whole package, the next activity starts successfully. But then I don't need to use obfuscation either. Which is strange too: If I keep my whole package it works fine. But if I keep the two sub-packages (package.name.technical & package.name.functional), it won't work.
I keep a lot of View things, which I found in the internet. For e.g.:
-keep class android.widget.AutoCompleteTextView {*;}
-keep class android.widget.Spinner {*;}
-keep class android.widget.ArrayAdapter {*;}
-keep public class * extends android.widget.AdapterView {*;}
-keep public class * extends android.widget.Adapter {*;}
-keep public class * extends android.widget.BaseAdapter {*;}
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
I also keep the activity that should start.
"shrinkResources" is NOT enabled in build.gradle.
Does anyone have any idea why? I'm getting really desperate and don't know what to do.
Interesting issue! Let's dig into it a bit.
First, what's null
? Well, there's only one toString()
call in ArrayAdapter.createViewFromResource
, so it's got to be that.
That's the item that's returned from getItem(position)
a few lines up.
getItem
is simple: it just returns an item from the List
of objects passed into the constructor.
Thus, your problem is that something about your Proguard obfuscation is causing you to have a null
item in the List
passed into one of your ArrayAdapter
s. Perhaps an issue inflating models via Gson or other reflection-based deserialization?