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, для получения набора и редактирования значения.
если у вас есть какие-либо вопросы по этому поводу, вы можете задать мне.