Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exception in the Android's code while starting the app

In the "Crashes and ANRs" of the Google Play Developer console I've got such a report:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.content.res.Resources.getAssets()' on a null object reference
at android.app.LoadedApk.getAssets(LoadedApk.java:590)
at android.app.LoadedApk.makeApplication(LoadedApk.java:646)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5088)
at android.app.ActivityThread.access$1600(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5944)
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:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)

The device that has this problem is Galaxy S4 and runs Android 5.0

What it can be - there is not a single line from my code, why does it fail?

Thanks a lot!

like image 281
sberezin Avatar asked Jul 15 '15 19:07

sberezin


People also ask

What is the exception in Android?

An exception is an event that disrupts the normal flow of a program execution. For example, unusual user inputs, or a file system error when reading or writing a file. Exception handling prevents a program from crashing by managing these situations.

How are exceptions handled in Android?

First, if a handler has been set on the current Thread , this will be invoked. Next up will be a handler on the ThreadGroup , before finally, the default handler is invoked, which will handle all uncaught JVM exceptions by printing a stacktrace, and then terminating the app.


1 Answers

I've got this in my console too. It seems this occurs when users start the app when it's currently being updated or just after that.

A possible workaround would be to check if getResources returns null when the application start, and kill it if it does:

public class DevToolsApplication extends Application { 
    private static final String TAG = "DevToolsApplication"; 

    @Override 
    public void onCreate() { 
        super.onCreate(); 
        AppLogger.i(TAG, "app start..."); 
        checkAppReplacingState(); 
    } 

    private void checkAppReplacingState() { 
        if (getResources() == null) { 
            AppLogger.w(TAG, "app is replacing...kill"); 
            Process.killProcess(Process.myPid()); 
        } 
    } 
} 

See this for more information https://issuetracker.google.com/issues/36972466

like image 189
Simon Avatar answered Oct 26 '22 03:10

Simon