VerifyError for init snippet after building TestFairy apk

Here is a weird crash, can anyone explain why it appears.

When trying to open (by tab or sliding) the third snippet in the ViewPager (the first two are initialized automatically) there is not much information in the Log, and just suggest "Check".

When the apk generated by Android Studio cannot be played, only exists in the apk created by TestFairy

STACK_TRACE=java.lang.VerifyError: .../CaseDetailUsersFragment
at ...CaseDetailViewPagerAdapter.getFragment(CaseDetailViewPagerAdapter.java:55)
at ...CaseDetailViewPagerAdapter.getItem(CaseDetailViewPagerAdapter.java:35)
at android.support.v13.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:101)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:836)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1052)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:554)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:513)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:494)
at ...CaseDetailViewPagerFragment.onTabSelected(CaseDetailViewPagerFragment.java:148)
at 
...view.MaterialTab.onTouch(MaterialTab.java:191)
at android.view.View.dispatchTouchEvent(View.java:7772)

      

CaseDetailViewPagerAdapter

public class CaseDetailViewPagerAdapter extends FragmentPagerAdapter{
        /**
         * class Adapter for Tabs in CaseDetail
         */
        public class CaseDetailViewPagerAdapter extends FragmentPagerAdapter{
            private final Context context;
            private String caseId;
            private int numItems;
            public CaseDetailViewPagerAdapter(Context context, FragmentManager fm, String caseId, int numItems) {
                super(fm);
                this.context = context;
                this.caseId = caseId;
                this.numItems = numItems;
            }

            @Override
            public Fragment getItem(int i) {
                return getFragment(i);
            }

            @Override
            public int getCount() {
                return numItems;
            }

            /**
             * @return instance of Fragment accordion to selected position
             */
            private Fragment getFragment(int position) {
                switch (position) {
                    case 0:
                        return CaseDetailLogFragment.newInstance(caseId);
                    case 1:
                        return CaseDetailChecklistFragment.newInstance(caseId);
                    case 2:
    //55 line                    return CaseDetailUsersFragment.newInstance(caseId);
                    case 3:
                        return CaseDetailMapFragment.newInstance(caseId);
                }
                return null;
            }
        }

      

CaseDetailUsersFragment

public class CaseDetailUsersFragment extends Fragment {

    public static final int USER_LOADER_ID = 3;
    public static final int GROUP_LOADER_ID = 4;
    static final String CASE_ID = "case_id";
    String caseServerId;



    public static CaseDetailUsersFragment newInstance(String caseId) {
        CaseDetailUsersFragment usersFragment = new CaseDetailUsersFragment();
        Bundle bundle = new Bundle();
        bundle.putString(CASE_ID, caseId);
        usersFragment.setArguments(bundle);
        return usersFragment;
    }

@Override
    public void onServiceResult(long requestId, Intent requestIntent, int resultCode, Bundle resultData) {
        super.onServiceResult(requestId, requestIntent, resultCode, resultData);
        if (requestId == requestIdGetCaseUsersCommand && GetCaseUsersCommand.ACTION.equals(requestIntent.getAction())) {
            requestIdGetCaseUsersCommand = BaseServiceHelper.DEFAULT_REQUEST_ID;
            switch (resultCode) {
                case Command.RESULT_SUCCESSFUL:
                    Logger.logD("onServiceResult finish refreshing");
                    Bundle b = new Bundle();
                    b.putString(CASE_ID, caseServerId);
                    getLoaderManager().restartLoader(USER_LOADER_ID, b, usersLoader);
                    showSwipeProgress(false);
                break;
                case Command.RESULT_FAILURE:
                    showSwipeProgress(false);
                    if (!NetworkHelper.isConnected(getActivity())) {
                        Toast.makeText(getActivity(), R.string.notification_error_no_connection, Toast.LENGTH_LONG).show();
                    } else if (resultData != null) {
                        ErrorInfo errorInfo = resultData.getParcelable(TransitionConstant.ERROR_INFO);
                        if (errorInfo != null) {
                            Toast.makeText(getActivity(), errorInfo.getErrorMessage(), Toast.LENGTH_LONG).show();
                        } else {
                            Toast.makeText(getActivity(), getString(R.string.failure_get_case_list_error_code, resultData.getInt(TransitionConstant.STATUS_ERROR_CODE)), Toast.LENGTH_LONG).show();
                        }
                    } else {
                        Toast.makeText(getActivity(), R.string.failure_get_case_list, Toast.LENGTH_LONG).show();
                    }

                break;
                default:
                    break;
            }
        } else if (requestId == requestIdGetCaseGroupsCommand && GetCaseGroupsCommand.ACTION.equals(requestIntent.getAction())) {
            requestIdGetCaseGroupsCommand = BaseServiceHelper.DEFAULT_REQUEST_ID;
            switch (resultCode) {
                case Command.RESULT_SUCCESSFUL:
                    Logger.logD("onServiceResult finish refreshing groups");
                    Bundle b = new Bundle();
                    b.putString(CASE_ID, caseServerId);
                    getLoaderManager().restartLoader(GROUP_LOADER_ID, b, groupLoader);
                break;
                case Command.RESULT_FAILURE:
                    if (!NetworkHelper.isConnected(getActivity())) {
                        Toast.makeText(getActivity(), R.string.notification_error_no_connection, Toast.LENGTH_LONG).show();
                    } else if (resultData != null) {
                        ErrorInfo errorInfo = resultData.getParcelable(TransitionConstant.ERROR_INFO);
                        if (errorInfo != null) {
                            Toast.makeText(getActivity(), errorInfo.getErrorMessage(), Toast.LENGTH_LONG).show();
                        } else {
                            Toast.makeText(getActivity(), getString(R.string.failure_get_case_list_error_code, resultData.getInt(TransitionConstant.STATUS_ERROR_CODE)), Toast.LENGTH_LONG).show();
                        }
                    } else {
                        Toast.makeText(getActivity(), R.string.failure_get_case_list, Toast.LENGTH_LONG).show();
                    }

                break;
                default:
                    break;
            }
        }
    }

      


compileSdkVersion 22
buildToolsVersion "22.0.1"
minSdkVersion 16
targetSdkVersion 22

      


Fixed by break onServiceResult () method for two methods.

W / dalvikvm was found in warnings in TestFairy log? VFY: Rejected by Lmy.package / MyClass; .methodV

+3


source to share


1 answer


The cause of this error should be found in the dalwik warnings in the logcat app For example: W / dalvikvm? VFY: Rejected by Lmy.package / MyClass; .methodV



In this case, a refactoring method is needed because your method is too complex. For a detailed answer see: VerifyError - Denied by a rejected class

+1


source







All Articles