Android Intent和OnActivityResult导致活动以实际方式重新启动:需要解决此问题
我有20个imageview,我有20个按钮,当我点击任何1个按钮时,它给我选择gallery或camera中的图像的选项,当我选择任何选项时,例如gallery,它将带我到gallery,让我从他们中选择图像,并让我在imageview中显示相应按钮的图像 现在的问题是,有时当我执行上述整个过程时,我的活动会自动重新启动,所有首先选择的图像都会从其imageview中消失 参考我的代码如下:Android Intent和OnActivityResult导致活动以实际方式重新启动:需要解决此问题,android,android-layout,android-intent,Android,Android Layout,Android Intent,我有20个imageview,我有20个按钮,当我点击任何1个按钮时,它给我选择gallery或camera中的图像的选项,当我选择任何选项时,例如gallery,它将带我到gallery,让我从他们中选择图像,并让我在imageview中显示相应按钮的图像 现在的问题是,有时当我执行上述整个过程时,我的活动会自动重新启动,所有首先选择的图像都会从其imageview中消失 参考我的代码如下: @Override public void onCreate(Bundle
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_upload);
// *****************Assigning Button variable their Id declare in XML
// file starts here*****************
new_select1 = (Button) findViewById(R.id.new_select1);
new_select2 = (Button) findViewById(R.id.new_select2);
new_select3 = (Button) findViewById(R.id.new_select3);
new_select4 = (Button) findViewById(R.id.new_select4);
new_select5 = (Button) findViewById(R.id.new_select5);
new_select6 = (Button) findViewById(R.id.new_select6);
new_select7 = (Button) findViewById(R.id.new_select7);
new_select8 = (Button) findViewById(R.id.new_select8);
new_select9 = (Button) findViewById(R.id.new_select9);
new_select10 = (Button) findViewById(R.id.new_select10);
new_select11 = (Button) findViewById(R.id.new_select11);
new_select12 = (Button) findViewById(R.id.new_select12);
new_select13 = (Button) findViewById(R.id.new_select13);
new_select14 = (Button) findViewById(R.id.new_select14);
new_select15 = (Button) findViewById(R.id.new_select15);
new_select16 = (Button) findViewById(R.id.new_select16);
new_select17 = (Button) findViewById(R.id.new_select17);
new_select18 = (Button) findViewById(R.id.new_select18);
new_select19 = (Button) findViewById(R.id.new_select19);
new_select20 = (Button) findViewById(R.id.new_select20);
// *****************Assigning Button variable their Id declare in XML
// file ends here*****************
// *****************Assigning Image variable their Id declare in XML
// file starts here*****************
new_selectimage1 = (ImageView) findViewById(R.id.new_selectImage1);
new_selectimage2 = (ImageView) findViewById(R.id.new_selectImage2);
new_selectimage3 = (ImageView) findViewById(R.id.new_selectImage3);
new_selectimage4 = (ImageView) findViewById(R.id.new_selectImage4);
new_selectimage5 = (ImageView) findViewById(R.id.new_selectImage5);
new_selectimage6 = (ImageView) findViewById(R.id.new_selectImage6);
new_selectimage7 = (ImageView) findViewById(R.id.new_selectImage7);
new_selectimage8 = (ImageView) findViewById(R.id.new_selectImage8);
new_selectimage9 = (ImageView) findViewById(R.id.new_selectImage9);
new_selectimage10 = (ImageView) findViewById(R.id.new_selectImage10);
new_selectimage11 = (ImageView) findViewById(R.id.new_selectImage11);
new_selectimage12 = (ImageView) findViewById(R.id.new_selectImage12);
new_selectimage13 = (ImageView) findViewById(R.id.new_selectImage13);
new_selectimage14 = (ImageView) findViewById(R.id.new_selectImage14);
new_selectimage15 = (ImageView) findViewById(R.id.new_selectImage15);
new_selectimage16 = (ImageView) findViewById(R.id.new_selectImage16);
new_selectimage17 = (ImageView) findViewById(R.id.new_selectImage17);
new_selectimage18 = (ImageView) findViewById(R.id.new_selectImage18);
new_selectimage19 = (ImageView) findViewById(R.id.new_selectImage19);
new_selectimage20 = (ImageView) findViewById(R.id.new_selectImage20);
// ****Assigning Image variable their Id declare in XML file ends
// here*****************
// **************Creating Dialog to give option to user to new_select
// image from gallery or from camera starts here****************
final String[] items = new String[] { "From Camera", "From Gallery" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.select_dialog_item, items);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("select Image");
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (item == 0) {
if (android.os.Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED)) {
Intent intent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment
.getExternalStorageDirectory(),
"/AUSRWC/picture" + ".jpg");
mImageCaptureUri = Uri.fromFile(file);
try {
Toast.makeText(getBaseContext(), "Click Image",
Toast.LENGTH_SHORT).show();
intent.putExtra(
android.provider.MediaStore.EXTRA_OUTPUT,
mImageCaptureUri);
intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);
} catch (Exception e) {
e.printStackTrace();
}
} else {
Toast.makeText(getBaseContext(),
"Please insert SdCard First",
Toast.LENGTH_SHORT).show();
}
dialog.cancel();
} else {
Intent intent = new Intent();
Toast.makeText(getBaseContext(), "Select Image",
Toast.LENGTH_SHORT).show();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Complete action using"), PICK_FROM_FILE);
}
}
});
dialog = builder.create();
// **************Creating Dialog to give option to user to new_select
// image from gallery or from camera ends here****************
// ********************Image 1 button code starts
// here*******************************
new_select1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 1;
dialog.show();
}
});
// ********************Image 1 button code ends
// here*******************************
// ********************Image 2 button code starts
// here*******************************
new_select2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 2;
dialog.show();
}
});
// ********************Image 2 button code ends
// here*******************************
// ********************Image 3 button code starts
// here*******************************
new_select3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 3;
dialog.show();
}
});
// ********************Image 3 button code ends
// here*******************************
// ********************Image 4 button code starts
// here*******************************
new_select4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 4;
dialog.show();
}
});
// ********************Image 4 button code ends
// here*******************************
// ********************Image 5 button code starts
// here*******************************
new_select5.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 5;
dialog.show();
}
});
// ********************Image 5 button code ends
// here*******************************
// ********************Image 6 button code starts
// here*******************************
new_select6.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 6;
dialog.show();
}
});
// ********************Image 6 button code ends
// here*******************************
// ********************Image 7 button code starts
// here*******************************
new_select7.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 7;
dialog.show();
}
});
// ********************Image 7 button code ends
// here*******************************
// ********************Image 8 button code starts
// here*******************************
new_select8.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 8;
dialog.show();
}
});
// ********************Image 8 button code ends
// here*******************************
// ********************Image 9 button code starts
// here*******************************
new_select9.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 9;
dialog.show();
}
});
// ********************Image 9 button code ends
// here*******************************
// ********************Image 10 button code starts
// here*******************************
new_select10.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 10;
dialog.show();
}
});
// ********************Image 10 button code ends
// here*******************************
// ********************Image 11 button code starts
// here*******************************
new_select11.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 11;
dialog.show();
}
});
// ********************Image 11 button code ends
// here*******************************
// ********************Image 12 button code starts
// here*******************************
new_select12.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 12;
dialog.show();
}
});
// ********************Image 12 button code ends
// here*******************************
// ********************Image 13 button code starts
// here*******************************
new_select13.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 13;
dialog.show();
}
});
// ********************Image 13 button code ends
// here*******************************
// ********************Image 14 button code starts
// here*******************************
new_select14.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 14;
dialog.show();
}
});
// ********************Image 14 button code ends
// here*******************************
// ********************Image 15 button code starts
// here*******************************
new_select15.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 15;
dialog.show();
}
});
// ********************Image 15 button code ends
// here*******************************
// ********************Image 16 button code starts
// here*******************************
new_select16.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 16;
dialog.show();
}
});
// ********************Image 16 button code ends
// here*******************************
// ********************Image 17 button code starts
// here*******************************
new_select17.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 17;
dialog.show();
}
});
// ********************Image 17 button code ends
// here*******************************
// ********************Image 18 button code starts
// here*******************************
new_select18.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 18;
dialog.show();
}
});
// ********************Image 18 button code ends
// here*******************************
// ********************Image 19 button code starts
// here*******************************
new_select19.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 19;
dialog.show();
}
});
// ********************Image 19 button code ends
// here*******************************
// ********************Image 20 button code starts
// here*******************************
new_select20.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
buttonpressed = 20;
dialog.show();
}
});
// ********************Image 20 button code ends
// here*******************************
}
// ***********************To get Path of new_selected Image code starts
// here************************************
public String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(contentUri, proj, null, null, null);
if (cursor == null)
return null;
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
// ***********************To get Path of new_selected Image code ends
// here************************************
// **********************Picture obtained from the camera or from gallery
// code starts here**************
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//path = "";
Log.e("","requestCode="+requestCode);
switch (requestCode){
case PICK_FROM_FILE:
if (resultCode == Activity.RESULT_OK) {
mImageCaptureUri = data.getData();
path = getRealPathFromURI(mImageCaptureUri); // from Gallery
Log.e("", "Imagepath from gallery=" + path);
if (path == null)
path = mImageCaptureUri.getPath(); // from File Manager
if (path != null) {
dialog1 = ProgressDialog.show(new_upload.this, "",
"Processing Please wait...", true);
new ImageDisplayTask().execute();
}
}
break;
case PICK_FROM_CAMERA:
if (resultCode == Activity.RESULT_OK) {
try {
path = mImageCaptureUri.getPath();
Log.e("", "Imagepath from Camera =" + path);
// bitmap = BitmapFactory.decodeFile(path);
} catch (Exception e) {
e.printStackTrace();
}
if (path != null) {
dialog1 = ProgressDialog.show(new_upload.this, "",
"Processing Please wait...", true);
//new ImageDisplayTask1().execute();
new ImageDisplayTask().execute();
}
}
break;
default:
}
}
// ********************Picture obtained from the camera or from gallery code
// ends here*********************************************
// ******************Image Display on Button when new_selected from gallery
// Ashynch Code starts here********************************
class ImageDisplayTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... unsued) {
Bitmap src = BitmapFactory.decodeFile(path);
Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(),
Bitmap.Config.ARGB_8888);
//Bitmap dest = Bitmap.createScaledBitmap(src, src.getWidth(),src.getHeight(), true);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String dateTime = sdf.format(Calendar.getInstance().getTime()); // reading local ``
String timestamp = dateTime + " " + roadworthynumber;
SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String dateTime1 = sdf1.format(Calendar.getInstance().getTime());
Imagename = dateTime1.toString().trim().replaceAll(":", "")
.replaceAll("-", "").replaceAll(" ", "")
+ roadworthynumber + ".jpg";
Canvas cs = new Canvas(dest);
Paint tPaint = new Paint();
tPaint.setTextSize(100);
tPaint.setTypeface(Typeface.SERIF);
tPaint.setColor(Color.RED);
tPaint.setStyle(Style.FILL);
cs.drawBitmap(src, 0f, 0f, null);
float height = tPaint.measureText("yY");
cs.drawText(timestamp, 5f, src.getHeight() - height + 5f, tPaint);
try {
dest.compress(Bitmap.CompressFormat.JPEG, 70,
new FileOutputStream(new File(cacheDir, Imagename)));
dest.recycle();
src.recycle();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Void... unsued) {
}
@Override
protected void onPostExecute(String serverresponse) {
String error = "noerror";
Display currentDisplay = getWindowManager().getDefaultDisplay();
int dw = currentDisplay.getWidth();
int dh = currentDisplay.getHeight() - 100;
Log.e("", "width= " + dw + " Height= " + dh);
try {
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeFile(
Environment.getExternalStorageDirectory() + "/AUSRWC/"
+ Imagename, bmpFactoryOptions);
int heightRatio = (int) Math.ceil(bmpFactoryOptions.outHeight
/ (float) dh);
int widthRatio = (int) Math.ceil(bmpFactoryOptions.outWidth
/ (float) dw);
if (heightRatio > 1 && widthRatio > 1) {
if (heightRatio > widthRatio) {
bmpFactoryOptions.inSampleSize = heightRatio;
} else {
bmpFactoryOptions.inSampleSize = widthRatio;
}
}
bmpFactoryOptions.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeFile(
Environment.getExternalStorageDirectory() + "/AUSRWC/"
+ Imagename, bmpFactoryOptions);
if (buttonpressed == 1) {
new_selectimage1.setImageBitmap(bmp); //Image set on ImageView
} else if (buttonpressed == 2) {
new_selectimage2.setImageBitmap(bmp);//Image set on ImageView
} else if (buttonpressed == 3) {
new_selectimage3.setImageBitmap(bmp);//Image set on ImageView
} else if (buttonpressed == 4) {
new_selectimage4.setImageBitmap(bmp);//Image set on ImageView
} else if (buttonpressed == 5) {
new_selectimage5.setImageBitmap(bmp);//Image set on ImageView
} else if (buttonpressed == 6) {
new_selectimage6.setImageBitmap(bmp);//Image set on ImageView
} else if (buttonpressed == 7) {
new_selectimage7.setImageBitmap(bmp);//Image set on ImageView
} else if (buttonpressed == 8) {
new_selectimage8.setImageBitmap(bmp);//Image set on ImageView
} else if (buttonpressed == 9) {
new_selectimage9.setImageBitmap(bmp);//Image set on ImageView
} else if (buttonpressed == 10) {
new_selectimage10.setImageBitmap(bmp);
} else if (buttonpressed == 11) {
new_selectimage11.setImageBitmap(bmp);
} else if (buttonpressed == 12) {
new_selectimage12.setImageBitmap(bmp);
} else if (buttonpressed == 13) {
new_selectimage13.setImageBitmap(bmp);
} else if (buttonpressed == 14) {
new_selectimage14.setImageBitmap(bmp);
} else if (buttonpressed == 15) {
new_selectimage15.setImageBitmap(bmp);
} else if (buttonpressed == 16) {
new_selectimage16.setImageBitmap(bmp);
} else if (buttonpressed == 17) {
new_selectimage17.setImageBitmap(bmp);
} else if (buttonpressed == 18) {
new_selectimage18.setImageBitmap(bmp);
} else if (buttonpressed == 19) {
new_selectimage19.setImageBitmap(bmp);
} else if (buttonpressed == 20) {
new_selectimage20.setImageBitmap(bmp);
}
} catch (Exception e)
{
Log.e("",e.tostring());
}
看起来活动正在重新创建。 尝试将以下内容添加到清单中的活动条目中
android:configChanges=orientation | keyboard隐藏的android:launchMode=singleTask问题可能是由于内存利用率。尝试使用内存分析器工具测试代码,以便识别问题
如果您在活动重新创建期间发布日志语句,我可以更好地帮助您。请清理您的代码,因为现在很难理解它。@Orlmye感谢您的回复。。。。我已经按照您的要求编辑了代码。因此,现在请检查我的代码,您是否可以让我知道为什么会出现错误…还想添加一些我在对其进行更多测试时发现的详细信息。1在模拟器上测试时不会出现问题,而是在尝试在android中选择图像时出现的问题手机版本2.3.4设备名称三星galaxy ace 2当我已经从我的多媒体资料中选择了15张图片,然后我尝试选择图片时,问题就会出现。3由于我正在使用我的设备,我没有得到相同的正确日志@不知道为什么会发生这样的错误。我一直试图使用日志,但没有用。请帮助发布您的xml文件,以便我们可以尝试在endhi user623517进行测试。您能告诉我如何将我的所有文件发送给您,因为堆栈中不允许这样做吗发布更大的代码,而且由于这个限制,我发布的代码被缩短了。这里还有一件事要加起来,那就是在经历了所有事情之后,我发现了以下几件事。1当我在emulator上进行测试时,问题不会出现。当我尝试在android手机版本2.3.4设备名三星galaxy ace中选择图像时,问题会出现。2当我已经从我的图库中选择了15个图像,然后我尝试选择图像时,问题会出现。3由于我使用的是我的设备,所以我没有得到相同的正确日志@不知道为什么会发生这样的错误。我一直试图使用日志,但没有用。请帮助在设备上运行日志时,您可以发布日志输出吗?我认为改变启动模式没有帮助?发布日志输出。根据您的需要,我已经添加了我的日志,当我运行我的应用程序并将错误输入我的手机时,我会得到日志
06-11 12:36:43.899: I/ActivityManager(163): Process com.AUSRWC (pid 18012) has died.
06-11 12:36:43.899: I/ActivityManager(163): Low Memory: No more background processes.
06-11 12:36:43.909: I/WindowManager(163): WIN DEATH: Window{409be3d0 com.AUSRWC/com.AUSRWC.new_upload paused=false}
06-11 12:36:45.199: I/InputReader(163): dispatchTouch::touch event's action is 0
06-11 12:36:45.199: I/InputDispatcher(163): Delivering touch to current input target: action: 0, channel '40866bd8 com.cooliris.media/com.cooliris.media.Gallery (server)'
06-11 12:36:45.279: I/InputReader(163): dispatchTouch::touch event's action is 1
06-11 12:36:45.279: I/InputDispatcher(163): Delivering touch to current input target: action: 1, channel '40866bd8 com.cooliris.media/com.cooliris.media.Gallery (server)'
06-11 12:36:45.279: D/Gallery(18750): performReturn : contentUri = content://media/external/images/media/421
06-11 12:36:45.289: D/Gallery(18750): performReturn : result = Intent { dat=content://media/external/images/media/421 }
06-11 12:36:45.289: I/RenderView(18750): OnPause RenderView com.cooliris.media.RenderView@40515188
06-11 12:36:45.289: E/SensorManager(18750): unregisterListener:: all sensors, listener = com.cooliris.media.RenderView@40515188
06-11 12:36:45.299: I/GLThread(18750): onPause tid=46
06-11 12:36:45.299: I/Main thread(18750): onPause waiting for mPaused.
06-11 12:36:45.299: I/Main thread(18750): onPause waiting for mPaused.
06-11 12:36:45.309: I/GLThread(18750): mPaused is now true tid=46
06-11 12:36:45.309: I/GLThread(18750): releasing EGL surface because paused tid=46
06-11 12:36:45.309: W/EglHelper(18750): destroySurface() tid=46
06-11 12:36:45.319: W/EglHelper(18750): finish() tid=46
06-11 12:36:45.349: I/GLThread(18750): releasing EGL context because paused tid=46
06-11 12:36:45.359: I/ActivityManager(163): Start proc com.AUSRWC for activity com.AUSRWC/.new_upload: pid=18810 uid=10067 gids={3003, 1006, 1015}
06-11 12:36:45.419: I/OrientationDebug(163): [pwm] in updateOrientationListenerLp()
06-11 12:36:45.419: V/OrientationDebug(163): in updateOrientationListenerLp(), Screen status=true, current orientation=1, SensorEnabled=true
06-11 12:36:45.419: I/OrientationDebug(163): [pwm] needSensorRunningLp(), return true #4
06-11 12:36:45.439: E/jdwp(18810): Failed sending reply to debugger: Broken pipe
06-11 12:36:45.499: I/GLThread(18750): noticed surfaceView surface lost tid=46
06-11 12:36:45.609: I/ApplicationPackageManager(18810): cscCountry is not German : INU