NullpointerException во время getWindow(). GetAttributes();

Я пытаюсь получить яркость экрана в Android.

Сценарий таков, что класс A вызывает функцию класса B как:

Класс А:

if(condition is true){
  ClassB.function();
}

Класс Б:

function(){
WindowManager.LayoutParams screenBrightness = getWindow()
                    .getAttributes();
screenBrightness.screenBrightness = 1;
screenBrightness.flags |= WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
screenBrightness.flags |= WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
screenBrightness.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
getWindow().setAttributes(screenBrightness);
}

Полученное исключение выглядит так:

06-15 13:36:30.476: E/AndroidRuntime(8873): FATAL EXCEPTION: main
06-15 13:36:30.476: E/AndroidRuntime(8873): java.lang.NullPointerException
06-15 13:36:30.476: E/AndroidRuntime(8873):     at function(B.java:68)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at something.run(A.java:104)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at android.os.Handler.handleCallback(Handler.java:587)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at android.os.Looper.loop(Looper.java:130)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at android.app.ActivityThread.main(ActivityThread.java:3701)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at java.lang.reflect.Method.invokeNative(Native Method)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at java.lang.reflect.Method.invoke(Method.java:507)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
06-15 13:36:30.476: E/AndroidRuntime(8873):     at dalvik.system.NativeStart.main(Native Method)

Кто-нибудь сталкивался с этой проблемой ранее?

2 ответа

У меня была эта проблема, когда я позвонил transaction.commit(),

После изменения на transaction.commitAllowingStateLoss() проблема ушла.

Попробуйте следующий код:

if(condition is true){
  ClassB.function(this);
}

и функция:

public static void function(Activity activity){

    WindowManager.LayoutParams screenBrightness = activity.getWindow()
                    .getAttributes();
    screenBrightness.screenBrightness = 1;
    screenBrightness.flags |= WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
    screenBrightness.flags |= WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
    screenBrightness.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
    activity.getWindow().setAttributes(screenBrightness);
}

если вы хотите использовать этот подход, лучше увидеть эту ветку, потому что проходная ссылка на активность не является хорошим подходом.

но, как я вижу, ваша проблема лучше использовать SharedPreference, чтобы сохранить яркость в классе A и использовать его в классе B,

Вы можете увидеть этот вопрос для понимания, как использовать SharedPreference в Android, для получения набора и редактирования значения.

если у вас есть какие-либо вопросы по этому поводу, вы можете задать мне.

Другие вопросы по тегам