Java.lang.IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState: – Error en Fragment

Hola, he utilizado el fragmento A y segundo fragmento utilizado b. Una llamada a b y en el método utilizado asynctask pero he utilizado esta primera vez que está perfectamente trabajado, pero la segunda vez, a continuación, bloqueo de la aplicación y mi error de inicio de sesión a continuación ::: He trabajado Samsung comprimido perfecto trabajado, pero Samsung núcleo móvil en el accidente de la aplicación.

 E/AndroidRuntime: FATAL EXCEPTION: main E/AndroidRuntime: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343) E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1361) E/AndroidRuntime: at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) E/AndroidRuntime: at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) E/AndroidRuntime: at com.buymysari.fragment.SendImageServerFragment$SendImageServerTask.onPostExecute(SendImageServerFragment.java:158) E/AndroidRuntime: at com.buymysari.fragment.SendImageServerFragment$SendImageServerTask.onPostExecute(SendImageServerFragment.java:1) E/AndroidRuntime: at android.os.AsyncTask.finish(AsyncTask.java:631) E/AndroidRuntime: at android.os.AsyncTask.access$600(AsyncTask.java:177) E/AndroidRuntime: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4960) E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method) 

Mi clase se utiliza en:

 public class TakeCameraFragment extends Fragment { Camera mCamera = null; private CameraPreview mCameraPreview; protected static final int MEDIA_TYPE_IMAGE = 0; static String FilePAth = ""; Button takePicture; static String base64string = ""; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.camerafragment, container, false); mCamera = getCameraInstance(); Log.v("log_tag", "mCamera :: " + mCamera); mCameraPreview = new CameraPreview(getActivity(), mCamera); FrameLayout preview = (FrameLayout) rootView .findViewById(R.id.camera_preview_fragment); preview.addView(mCameraPreview); takePicture = (Button) rootView .findViewById(R.id.btnTakePicturefragment); takePicture.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mCamera.takePicture(null, null, mPictureframent); } }); return rootView; } public boolean checkCameraHardware(Context context) { if (context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA)) { // this device has a camera return true; } else { // no camera on this device return false; } } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); releaseCamera(); } private void releaseCamera() { if (mCamera != null) { mCamera.release(); // release the camera for other applications mCamera = null; } } private Camera getCameraInstance() { try { Log.v("log_tag", "camera try:::" + mCamera); mCamera = Camera.open(); } catch (Exception e) { // cannot get camera or does not exist Log.v("log_tag", "camera catch:::" + mCamera); releaseCamera(); } return mCamera; } private static File getOutputMediaFile() { File mediaStorageDir = new File( Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraAppFragment"); if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { Log.d("MyCameraApp", "failed to create directory"); return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss") .format(new Date()); FilePAth = mediaStorageDir.getPath() + File.separator + "IMG_fragment_" + timeStamp + ".jpg"; Log.v("log", " FilePAth " + FilePAth); File mediaFile; mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_fragment_" + timeStamp + ".jpg"); return mediaFile; } PictureCallback mPictureframent = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { File pictureFile = getOutputMediaFile(); if (pictureFile == null) { return; } try { FileOutputStream fos = new FileOutputStream(pictureFile); fos.write(data); fos.close(); FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); SetPictureImageFragment fm2 = new SetPictureImageFragment(); fragmentTransaction.replace(R.id.relative_camerafragment_id, fm2, "HELLO"); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); Bundle bundle = new Bundle(); bundle.putByteArray("position", data); fm2.setArguments(bundle); mCamera.startPreview(); } catch (FileNotFoundException e) { } catch (IOException e) { } } }; } 

Segundo Fragmento utilizado:

 public class SetPictureImageFragment extends Fragment { ImageView img; Bundle bundle; byte[] path; byte[] byteArrayimage; Button conform; float x; Bitmap b; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); View view = inflater.inflate(R.layout.capturepicturefragment, null); Log.v("log_tag","SetPictureImageFragment"); bundle = this.getArguments(); path = bundle.getByteArray("position"); Log.v("log_tag","SetPictureImageFragment ::: Path :: "+path); img = (ImageView) view.findViewById(R.id.camera_preview_fragment_imageview); conform=(Button)view.findViewById(R.id.conform); BitmapFactory.Options options = new BitmapFactory.Options(); options.inPurgeable = true; // inPurgeable is used to free up // memory while required Bitmap b = BitmapFactory.decodeByteArray(path, 0,path.length,options); int width = b.getWidth(); int height = b.getHeight(); int newWidth = 500; int newHeight = 500; float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); int rotation = getActivity().getWindowManager().getDefaultDisplay().getRotation(); int finalDegree = 0; if(rotation == 0) { finalDegree = 90; } if(rotation == 1) { finalDegree = 270; } if(rotation == 2) { finalDegree = 180; } if(rotation == 3) { finalDegree = 90; } matrix.postRotate(finalDegree); Bitmap resizedBitmap = Bitmap.createBitmap(b, 0, 0,width, height, matrix, true); ByteArrayOutputStream stream = new ByteArrayOutputStream(); resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byteArrayimage = stream.toByteArray(); img.setScaleType(ScaleType.CENTER); img.setImageBitmap(resizedBitmap); conform.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub FragmentManager fm = getChildFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); SendImageServerFragment fm2 = new SendImageServerFragment(); // CreateStoreFragment fm2 = new CreateStoreFragment(); fragmentTransaction.replace(R.id.relative_cameraimageview_fragment, fm2, "HELLO"); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); Bundle bundle = new Bundle(); bundle.putByteArray("position", byteArrayimage); fm2.setArguments(bundle); } }); return view; } } 

Tercer Fragmento utilizado :::

 public class SendImageServerFragment extends Fragment { SegmentedRadioGroup segmentText; SegmentedRadioGroupMale segmentTextMale; Button sendImg; EditText edt_txt; MyApplication app; View view; Bundle bundle; byte[] path; String base64string = ""; Bitmap b; String cat_id = ""; String gender = ""; private ProgressDialog progress; InputMethodManager mgr; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .permitAll().build(); StrictMode.setThreadPolicy(policy); } view = inflater.inflate(R.layout.sendimageserver, null); // view.setFocusableInTouchMode(true); // view.requestFocus(); bundle = this.getArguments(); path = bundle.getByteArray("position"); segmentText = (SegmentedRadioGroup) view .findViewById(R.id.segment_text); segmentTextMale = (SegmentedRadioGroupMale) view .findViewById(R.id.segment_text_male); sendImg = (Button) view.findViewById(R.id.btn_send_image); edt_txt = (EditText) view.findViewById(R.id.edt_text_store_name); edt_txt.requestFocus(); mgr = (InputMethodManager) getActivity().getSystemService( Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(edt_txt, InputMethodManager.SHOW_IMPLICIT); app = (MyApplication) getActivity().getApplicationContext(); sendImg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int segTxt = segmentText.getCheckedRadioButtonId(); RadioButton radiocatButton = (RadioButton) view .findViewById(segTxt); int segmentTextMaleTxt = segmentTextMale .getCheckedRadioButtonId(); RadioButton radioSexButton = (RadioButton) view .findViewById(segmentTextMaleTxt); // b = BitmapFactory.decodeByteArray(path, 0, path.length); base64string = Base64.encodeToString(path, Base64.DEFAULT); if (radiocatButton.getText().toString().equals("S")) { cat_id = "4"; } else if (radiocatButton.getText().toString().equals("C")) { cat_id = "1"; } else if (radiocatButton.getText().toString().equals("A")) { cat_id = "5"; } if (radioSexButton.getText().toString().equals("M")) { gender = "Male"; } else if (radioSexButton.getText().toString().equals("F")) { gender = "Female"; } progress = new ProgressDialog(getActivity()); progress.setMessage("Loading..."); new SendImageServerTask(progress).execute("Home"); } }); return view; } public class SendImageServerTask extends AsyncTask<String, Void, String> { public SendImageServerTask(ProgressDialog progress) { progress = progress; } public void onPreExecute() { progress.show(); } @Override protected String doInBackground(String... arg) { String msg = DBAdpter.userUpdateImageStore(app.getStoreId(), edt_txt.getText().toString(), cat_id, base64string, gender); Log.v("log_tag", " Msg " + msg); return msg; } @Override protected void onPostExecute(String result) { // Create here your JSONObject... progress.dismiss(); Toast.makeText(getActivity().getApplicationContext(), result, Toast.LENGTH_LONG).show(); FragmentManager fm = getActivity().getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); StoreProfileGridFragment fm2 = new StoreProfileGridFragment(); fragmentTransaction.replace(R.id.relative_sendimage_send, fm2, "HELLO"); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); hideKeybord(edt_txt); } } public void hideKeybord(View view) { mgr.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN); } } 

Se conoce como pérdida de estado . Has cometido una FragmentTransaction desde AsyncTask. Esto está prohibido por el propio marco.

Si está de acuerdo con la posibilidad de pérdida de estado y comportamiento inesperado por el usuario, podría utilizar

FragmentTransaction#commitAllowingStateLoss()

en lugar de

FragmentTransaction#commit()

De todos modos, considere leer el enlace que proporcioné, es una situación muy común.

Edit: También, hay una solución de su problema. Pero supongo, las consecuencias de esto llevan a una posible pérdida del estado, también. Sin embargo:

Declare un Handler en su Fragment :

 private Handler handler = new Handler(); 

Entonces, en su onPostExecute(..) haga esto:

 @Override protected void onPostExecute(String result) { progress.dismiss(); Toast.makeText(getActivity().getApplicationContext(), result, Toast.LENGTH_LONG).show(); handler.post(new Runnable() { @Override public void run() { hideKeybord(edt_txt); FragmentManager fm = getActivity().getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); StoreProfileGridFragment fm2 = new StoreProfileGridFragment(); fragmentTransaction.replace(R.id.relative_sendimage_send, fm2, "HELLO"); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } }); return; } 
  • GAE Debe llamar a uno de set * BlobStorage () primero
  • Detectar el gesto de fling sobre los elementos que se pueden hacer clic
  • Persistencia de un objeto Parcelable en Android
  • ¿Cuál sería una simple expresión regular para la comprobación de contraseña durante la suscripción?
  • Envío de cadenas bluetooth en android
  • Cómo obtener getIntent () para devolver null después de Actividad llamada con un conjunto de intenciones
  • ¿Cómo comparar la excepción captada contra excepciones estándar en la tarea asíncrona android?
  • Cómo obtener la foto de Facebook, el nombre completo, el género usando Facebook SDK android
  • ¿Algún consejo sobre cómo acelerar esto en Android?
  • ¿Por qué overridePendingTransition no tiene efecto cuando salto de Fragment a una nueva Activity?
  • Rellene los datos del sitio web y haga clic en el botón y analizar la respuesta.
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.