当前位置: 首页 > 知识库问答 >
问题:

java.lang.onCreate的异常

金嘉言
2023-03-14

我在Google Play崩溃日志中看到了崩溃,这真的让我很困惑。

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3086)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3229)
  at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1926)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:214)
  at android.app.ActivityThread.main (ActivityThread.java:6981)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1445)
Caused by: androidx.fragment.app.Fragment$InstantiationException: 
  at androidx.fragment.app.Fragment.instantiate (Fragment.java:462)
  at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java:50)
  at androidx.fragment.app.FragmentState.instantiate (FragmentState.java:80)
  at androidx.fragment.app.FragmentManagerImpl.restoreAllState (FragmentManager.java:3109)
  at androidx.fragment.app.FragmentController.restoreAllState (FragmentController.java:158)
  at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java:344)
  at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.java:85)
  at com.autotask.jbarra.kotlinmvvm.MainActivity.onCreate (MainActivity.kt:102)
  at android.app.Activity.performCreate (Activity.java:7326)
  at android.app.Activity.performCreate (Activity.java:7317)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1271)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3066)

Caused by: java.lang.NoSuchMethodException: 
  at java.lang.Class.getConstructor0 (Class.java:2328)
  at java.lang.Class.getConstructor (Class.java:1725)
  at androidx.fragment.app.Fragment.instantiate (Fragment.java:443)

问题是,主要活动的102行没有什么特别的

    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState) //This is line 102

什么会导致这种情况?为什么oncreate没有抛出这样的方法?它发生在一些用户的设备上,我无法重现它。

共有3个答案

苏承载
2023-03-14

我的活动有一个使用废弃构造函数的FragmentPagerAdapter。我改变了

class MyPagerAdapter(
        fragmentManager: FragmentManager,
        private val myActivity: MyActivity
    ) : FragmentPagerAdapter(fragmentManager) // DEPRECATED

class MyPagerAdapter(
        fragmentManager: FragmentManager,
        private val myActivity: MyActivity
    ) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)

似乎已经解决了问题

米子轩
2023-03-14

我也有同样的问题。其他答案没有帮助。

对我来说,它看起来像是Proguard。这解释了为什么它只发生在生产/发布版本中,以及为什么我在调试时无法复制它。

如果您遇到OP的问题,请尝试以下操作:

  1. 构建模糊的。apk。我用了一个签名的,我发布到应用商店
  2. 在设备的开发者选项中启用“不要保留活动”
  3. 安装。apk并打开崩溃并包含片段的活动
  4. 离开你的应用程序(最小化/主页按钮/…)然后从“最近使用的应用程序”菜单中重新打开它

它会崩溃吗?然后尝试使用未混淆的调试版本。如果没有,那么可能是Proguard。

为了修复它,我做了以下操作:

  1. 创建proguard规则。应用程序模块根文件夹中的pro文件

添加

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

请参阅Yaroslav Mytkalyk的答案:片段实例化崩溃,它帮助我解决了这个问题,尽管它现在有点过时了(例如,“runProguard true”已经过时)。

至少现在当我执行上面的步骤时,它不会崩溃。

PS:我这样做是为了将0-arg构造函数添加到我的片段中,正如在其他答案中提到的,因为那是我第一次尝试修复。我相信ProGuard本身就是问题所在,没有必要添加所说的构造函数,但我现在无法测试这个假设。

孙子民
2023-03-14

正在从实例状态束还原活动。还原操作的一部分是重新创建其片段。

您的活动有一个片段,而片段类没有框架所需的0-arg构造函数。

 类似资料:
  • 问题内容: 什么是处理这种情况的最佳方法。我处于受控环境中,所以我不想崩溃。 从setTimeout内抛出时,我们将始终获得: 如果抛出发生在setTimeout之前,那么bluebirds catch将捕获它: 结果是: 很棒-但是如何在节点或浏览器中处理这种性质的恶意异步回调。 问题答案: 承诺不是域,它们不会捕获异步回调中的异常。你就是做不到。 然而诺言来捕捉从内抛出的异常/ / 构造函数的

  • 问题内容: 什么是处理这种情况的最佳方法。我处于受控环境中,所以我不想崩溃。 从setTimeout内抛出时,我们将始终获得: 如果抛出发生在setTimeout之前,那么bluebirds catch将捕获它: 结果是: 很棒-但是如何在节点或浏览器中处理这种性质的恶意异步回调。 问题答案: 承诺不是域,它们不会捕获异步回调中的异常。你就是做不到。 然而诺言来捕捉从内抛出的异常/ / 构造函数的

  • 问题内容: 我在Spring中使用javax-validation和hibaernate-validator进行表单验证。除了用于Spring的基本必要JAR文件。 我包括: 验证API-1.1.0.Final hibernate-validator-5.1.0.Final 我读到某处也关注到了spl4j版本:所以我也告诉: 错误原因可以归因于slf4j和log4j兼容性吗? 我使用注释基础验证。

  • 我的应用程序包含“服务定位器”模式的实现。ServiceLocator是一个中央组件,它执行远程EJB的(JNDI)查找,并被我们的几个应用程序/组件(r6-core、Java-API等)使用。ServiceLocator有几个配置选项,其主要目标是启用灵活的(机器独立/应用程序独立)部署场景。另一个目标是保护JNDI/EJB查找样板免受业务逻辑(代码)的影响。 如果将特定EJB配置为仅通过本地调

  • 问题内容: 我目前正在使用node.js应用程序,并且遇到了通常的异步代码问题。 我正在Node的HTTP模块之上实现服务服务器。 该服务器支持(类似表达)路由。例如,我有如下代码: 服务器需要能够承受故障,当传递给任何函数的问题出现时,我不想使整个服务器崩溃。当我编写如下代码时,会发生问题: 我看不到如何在这里捕获错误。我不想因一个服务器端故障而使服务器崩溃,而是要服务500个。 我能够提出的唯

  • 在将其标记为副本之前,请阅读问题。 我在我的谷歌控制台中设置了SHA1和SHA256。 我已经尝试了很多方法,但仍然面临错误。 未处理的异常: 平台异常(sign_in_failed, 还尝试了Flutter和google_sign_in插件:PlatformException(sign_in_failed,com.google.android.gms.common.api.ApiExceptio