嗨,我使用片段A和第二个片段b.调用b和使用asynctask方法,但我使用这第一次它是完美的工作,但第二次然后崩溃的应用程序和我的错误日志在下面:::我工作的三星平板电脑完美工作,但三星核心手机崩溃的应用程序.
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)
我的类用于:
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) { } } }; }
使用的第二片段:
public class SetPictureImageFragment extends Fragment { ImageView img; Bundle bundle; byte[] path; byte[] byteArrayimage; Button conform; float x; Bitmap b; public View onCreateView(LayoutInflater inflater,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,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,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,byteArrayimage); fm2.setArguments(bundle); } }); return view; } }