Я получаю ошибку IllegalStateException
, когда пытаюсь добавить аргументы в fragment
после завершения сетевого вызова. Авария происходит, когда сеть выполняет вызов и еще не завершена (медленные сети), и вы делаете активность в фоновом режиме (например, действия переключения)IllegalStateException при применении аргументов к фрагменту после сетевого ответа
Мне нужно передать данные, поступающие от сетевого вызова в fragment
(список адресов, которые будут заселить pageradapter для прокрутки изображений
Мой код:.
`onResume` I do the network call by calling `doWebserviceCall();`
После сетевого вызова я называю этот метод:
private void configureImageScroller() {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Bundle bundle = new Bundle();
// Boolean to hide the thumbnails when the Scrolling images is embedded in the item activity
bundle.putBoolean(ScrollingTradeImagesFragment.INTENT_BOOL_EMBEDDED, false);
// Pass the object to the Scrolling images fragment
bundle.putParcelable(INTENT_KEY_TRADE_OBJECT, Parcels.wrap(mTradeItem));
ScrollingTradeImagesFragment fragment = new ScrollingTradeImagesFragment();
FragmentManager fm = getSupportFragmentManager();
//-------Crash happens here-------//
fragment.setArguments(bundle);
fragmentTransaction.add(R.id.scrollable_image_container, fragment);
fragmentTransaction.commit();
}
метод, который запускается, когда сетевой вызов завершен:
@Override
public void populateItemViews(final TradeItem aTradeItem) {
mTradeItem = aTradeItem;
// Do some stuff here that is irrelevant
configureImageScroller();
// Do some other stuff here that is irrelevant
}
Что лучший способ сделать это, чтобы предотвратить эту катастрофу?
EDIT:
StackTrace:
Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1493)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1511)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:617)
at com.bidorbuy.app.item.ItemActivity.configureImageScroller(ItemActivity.java:112)
at com.bidorbuy.app.item.ItemActivity.populateItemViews(ItemActivity.java:233)
at com.bidorbuy.app.item.ItemPresenter.handleNetworkResponse(ItemPresenter.java:37)
at com.bidorbuy.app.network.NetworkManager$3.onResponse(NetworkManager.java:422)
at com.bidorbuy.app.network.NetworkManager$3.onResponse(NetworkManager.java:419)
at com.bidorbuy.app.network.volley.BobeRequest.deliverResponse(BobeRequest.java:127)
at com.bidorbuy.app.network.volley.BobeRequest.deliverResponse(BobeRequest.java:26)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
at android.os.Handler.handleCallback(Handler.java:810)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:189)
at android.app.ActivityThread.main(ActivityThread.java:5529)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:950)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
Что скажет стек? –
@MikeM. см. править – x10sion
Я думаю, что главное, что вы не отменяете ваш звонок. Если вы запустите сетевой вызов в OnResume, пожалуйста, отмените его в onPause. Вы отменяете вызов методом 'onPause'? –