【问题标题】:java.lang.VerifyError while instantiating a fragmentjava.lang.VerifyError 在实例化片段时
【发布时间】:2015-12-19 12:22:24
【问题描述】:

在 Lollipop 之前的 android 版本中,我在尝试实例化片段时不断收到 VerifyError,从而导致应用程序崩溃。有人可以向我解释这个错误的原因吗?

12-19 17:46:52.510  28238-28238/com.greeblu.tootl2 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.greeblu.tootl2, PID: 28238
java.lang.VerifyError: com/greeblu/tootl2/fragment/ProfileGridFragment
        at com.greeblu.tootl2.activity.ProfileActivity.launchGridFragment(ProfileActivity.java:289)
        at com.greeblu.tootl2.fragment.ProfileOverlayFragment$3.onClick(ProfileOverlayFragment.java:123)
        at android.view.View.performClick(View.java:4438)
        at android.view.View$PerformClick.run(View.java:18439)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5034)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
        at dalvik.system.NativeStart.main(Native Method)

这就是我为旧 android 版本调用片段的方式:

FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.profileContainer, new ProfileGridFragment(),fragmentTag); //Replaces the Fragment C previously in the right_container with a new Fragment B
        ft.commit();

编辑: onClick 调用的代码如下。它是从同一活动中的另一个片段调用的

picContainer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ((ProfileActivity) getActivity()).launchGridFragment(overlayDp, "all");
        }
    });

【问题讨论】:

  • 那个fragmentTag是什么???
  • 粘贴你的gradle。尝试 build clean 和 gradle clean。
  • 能不能把onClick()的代码发一下;
  • @Android fragmentTag 是一个静态字符串(“Tag”)

标签: java android android-fragments verifyerror


【解决方案1】:

我遇到了这个确切的错误,因为我有一个带有异常类的 try-catch 块,它在旧的 android 版本上不可用。该块甚至不在构造函数中,它在 onClick 方法之一中,因此甚至没有执行代码,但是当我尝试创建片段时,应用程序总是因 VerifyError 而崩溃。

通过使用 instanceof 检查更改子句块来解决它:

崩溃:

try {
    ...
} catch (FileUriExposedException e) {
    ...
}

工作正常:

try {
    ...
} catch (Exception e) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && e instanceof FileUriExposedException) {
        ...
    }
}

【讨论】:

    【解决方案2】:

    您是否正在使用来自 android.support.v4.app.Fragment 的支持 Fragment 类?如果是这样,你需要打电话

    getSupportFragmentManager()
    而不是
    getFragmentManager()

    请注意,android.app.Fragment 中的 Fragment 类现已弃用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多