[英]Why does instantiating a Gson object throw 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.