java.lang.IllegalStateException:在onSaveInstanceState之后无法执行此操
发布时间:2020-08-04 10:23:49 所属栏目:Java 来源:互联网
导读:嗨,我使用片段A和第二个片段b.调用b和使用asynctask方法,但我使用这第一次它是完美的工作,但第二次然后崩溃的应用程序和我的错误日志在下面:::我工作的三星平板电脑完美工作,但三星核心手机崩溃的应用程序. E/AndroidRuntime: FATAL EXCEPTION: mainE/Android
|
嗨,我使用片段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;
}
}
(编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
