应用程序有时会在 androidx.appcompat.widget.ContentFrameLayout.setDecorPadding() 方法上崩溃

问题描述 投票:0回答:3

有时,我在打开应用程序时会遇到此崩溃:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.widget.ContentFrameLayout.setDecorPadding(int, int, int, int)' on a null object reference
       at androidx.appcompat.app.AppCompatDelegateImpl.applyFixedSizeWindow(AppCompatDelegateImpl.java:1026)
       at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:820)
       at androidx.appcompat.app.AppCompatDelegateImpl.onPostCreate(AppCompatDelegateImpl.java:527)
       at androidx.appcompat.app.AppCompatActivity.onPostCreate(AppCompatActivity.java:127)
       at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1381)
       at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3499)
       at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
       at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
       at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
       at android.os.Handler.dispatchMessage(Handler.java:107)
       at android.os.Looper.loop(Looper.java:237)
       at android.app.ActivityThread.main(ActivityThread.java:7814)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)

正如您所看到的,堆栈跟踪中没有引用我的代码中的某些内容,因此因此我无法找出问题所在。这次崩溃的原因可能是什么?.

android androidx
3个回答
7
投票

就我而言,当我加载第一个屏幕时,我在生产中遇到了此错误。我也使用 androidx 并且没有支持库。有时这种崩溃看起来像:

Caused by java.lang.RuntimeException
Window couldn't find content container view ***.onCreate

不幸的是,我仍然不明白错误到底是什么,但我发现了这个post。我将

onCreate
方法更改为:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
     getWindow().getDecorView();
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main_screen);
}

只需在

getWindow().getDecorView();
之前添加
super.onCreate(savedInstanceState);
就解决了我的问题。


0
投票

当我想更改 navigationBarColor 时出现此错误。

 override fun onCreate(savedInstanceState: Bundle?) {
        window.navigationBarColor = ContextCompat.getColor(this, R.color.surface36)
        super.onCreate(savedInstanceState)
..

在 super.onCreate 之前到达窗口可能会导致此崩溃。我改变了它并解决了。


-2
投票

调用此方法之前添加为空检查

if (YourContentFrameLayout != null)
   YourContentFrameLayout.setDecorPadding(intvalue,intvalue,intvalue,intvalue);
© www.soinside.com 2019 - 2024. All rights reserved.