【问题标题】:Application crashes sometimes on androidx.appcompat.widget.ContentFrameLayout.setDecorPadding() method应用程序有时会在 androidx.appcompat.widget.ContentFrameLayout.setDecorPadding() 方法上崩溃
【发布时间】:2021-02-22 19:54:25
【问题描述】:

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

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


【解决方案1】:

就我而言,当我加载第一个屏幕时,我在生产中遇到了这个错误。我也使用 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);
}

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

【讨论】:

    【解决方案2】:

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

    if (YourContentFrameLayout != null)
       YourContentFrameLayout.setDecorPadding(intvalue,intvalue,intvalue,intvalue);
    

    【讨论】:

    • 我没有直接使用任何 ContentFrameLayout。似乎有一个库小部件在内部使用该组件,我想知道它是否是 ConstraintLayout
    • 你必须在日志中获取行号,检查一次。
    • 我没有看到对我的代码的任何引用。查看内部API类的代码,我注意到这里抛出了异常:android.googlesource.com/platform/frameworks/support/+/refs/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多