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
source to share
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
source to share