Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getWindow()期间出现NullpointerException。getAttributes();_Java_Android_Screen Brightness - Fatal编程技术网

Java getWindow()期间出现NullpointerException。getAttributes();

Java getWindow()期间出现NullpointerException。getAttributes();,java,android,screen-brightness,Java,Android,Screen Brightness,我正在尝试获取Android的屏幕亮度 这种情况下,类A调用类B的函数,如下所示: A类: if(condition is true){ ClassB.function(); } function(){ WindowManager.LayoutParams screenBrightness = getWindow() .getAttributes(); screenBrightness.screenBrightness = 1; screenBrig

我正在尝试获取Android的屏幕亮度

这种情况下,类A调用类B的函数,如下所示:

A类:

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);
}
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)
以前有人遇到过这个问题吗?

请尝试以下代码:

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);
}
如果您想更好地使用此方法,请查看,因为传递活动引用不是一个好方法

但正如我所见,你的问题是最好在A类中使用SharedReference来保存亮度,在B类中使用

您可以查看以了解如何在android中使用
SharedReference
,获取设置和编辑值


如果您对此有任何疑问,可以问我。

我在调用
transaction.commit()时遇到了这个问题


将其更改为
transaction.commitAllowingStateLoss()
后,问题消失了。

第68行是什么?@shayanpourvatan其“WindowManager.LayoutParams screenBrightness=getWindow().getAttributes();”。在进一步调试之后,我知道getWindow()返回null,因此出现了错误。但我很困惑,因为B类活动在屏幕上是可见的。A类和B类都是活动类?您需要创建静态方法并将活动的上下文传递给该函数@shayanpourvatan是的,A和B都是活动类。您的意思是类B应该创建为静态类。除此之外还有其他选择吗?我尝试使用这个.getWindow(),但仍然存在相同的问题,如果我们从类A调用“ClassB.function(this);”,它将传递类A的上下文,对吗?它将如何访问类B的getWindow()?只是好奇,还没试过。我不明白你的意思?您想知道如何从类B调用它吗?刚才注意到getWindow()将在Activity.class下可访问,而在Context.class下未定义它。你能检查一下吗?好像我想设置B类的亮度。如果我从A类调用该函数,它将改变A的亮度,并且不会反射到B上。你有其他建议吗?你可以使用SP在A类中保存值,并在B类的onResume()中设置亮度,然后你每次来这门课时,你的亮度都会被刷新。如果需要,请使用大写字母。正确格式化内联代码。