Here is strange crash, can anybody explain why it appear.
Crash appear when try to open (by tab or sliding) third fragment in ViewPager (first two initialized at this time automatically) in Log is not many info, and simply suggest to 'Verify'.
When apk created by Android Studio it can not be reproduced, exist only in 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 on two method.
in warnings in TestFairy log was found W/dalvikvm? VFY: rejected Lmy.package/MyClass;.methodV