繁体   English   中英

实例化片段时出现java.lang.VerifyError

[英]java.lang.VerifyError while instantiating a fragment

在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");
        }
    });

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

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

崩溃:

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

可以正常工作:

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

您是否正在使用android.support.v4.app.Fragment中的support Fragment类? 如果是这样,您需要致电

getSupportFragmentManager()
代替
getFragmentManager()

请注意,不推荐使用android.app.Fragment中的Fragment类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM