Ошибка NullPointer при запуске теста uiautomator на эмуляторе

Мне удалось запустить мой первый тестовый пример uiautomator в эмуляторе, и все прошло хорошо. Но когда я запускал тот же тест второй раз, в том же эмуляторе. Я получил эту ошибку:

INSTRUMENTATION_STATUS: stack=java.lang.NullPointerException
at com.android.uiautomator.core.ShellUiAutomatorBridge.getDefaultDisplay(ShellUiAutomatorBridge.java:50)
at com.android.uiautomator.core.UiDevice.getDisplayWidth(UiDevice.java:378)
at com.android.uiautomator.core.UiDevice.click(UiDevice.java:408)
at test.uiautomator.ApiTest.testCase(ApiTest.java:172)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAutomatorTestRunner.java:160)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutomatorTestRunner.java:96)
at com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.java:91)
at com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:243)
at dalvik.system.NativeStart.main(Native Method)

Кто-нибудь знает причину? Я не модифицировал ни одной строки в тестовом примере, я просто запустил ее во второй раз.

1 ответ

Я проверил код, здесь происходит ошибка:

public Display getDefaultDisplay() {
    return  DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY);// Nullpointer here. 
}

Это может привести к тому, что DisplayManagerGlobal.getInstance() вернул NULL.

см код:

/**
 * Gets an instance of the display manager global singleton.
 *
 * @return The display manager instance, may be null early in system startup
 * before the display manager has been fully initialized.
 */
public static DisplayManagerGlobal getInstance() {
    synchronized (DisplayManagerGlobal.class) {
        if (sInstance == null) {
            IBinder b = ServiceManager.getService(Context.DISPLAY_SERVICE);
            if (b != null) {
                sInstance = new DisplayManagerGlobal(IDisplayManager.Stub.asInterface(b));
            }
        }
        return sInstance;
    }
}
Другие вопросы по тегам