Android onActivityResult在操作\u拾取完成之前调用
我在从图库中选择图像并在应用程序中使用该图像时遇到一些问题。 我使用这个意图:Android onActivityResult在操作\u拾取完成之前调用,android,android-activity,android-gallery,android-photos,Android,Android Activity,Android Gallery,Android Photos,我在从图库中选择图像并在应用程序中使用该图像时遇到一些问题。 我使用这个意图: Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, ACTIVITY_SELECT_PHOTO); 这让我来到了画廊,在那里我可以挑选一张图片。 但当我选择一个时,onActivityResult立即被调用
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, ACTIVITY_SELECT_PHOTO);
这让我来到了画廊,在那里我可以挑选一张图片。
但当我选择一个时,onActivityResult
立即被调用,
而你选择的动作并没有完成一切。我想这就是问题所在。
我已经读到我应该尝试将清单中活动的启动模式更改为单顶模式
,但这不起作用。或者我应该更改“操作拾取”活动的启动模式
?
这可能吗
final static int ACTIVITY_SELECT_PHOTO = 0;
final static int ACTIVITY_CAMERA_PHOTO = 1;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
Log.d("onActivityresult", "req = " + requestCode + ", result = " + resultCode);
switch(requestCode) {
case ACTIVITY_SELECT_PHOTO:
if(resultCode == RESULT_OK){
Uri selectedImageUri=imageReturnedIntent.getData();
String actualPath=getRealPathFromURI(selectedImageUri);
File file=new File(actualPath);
Bitmap b=decodeFile(file); //this is new bitmap which you can use for your purpose
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 55, os);
compressedByteArray = os.toByteArray();
iv.setImageBitmap(b);
currentUser.put("picture", compressedByteArray);
Toast t = Toast.makeText(this, "Uploading picture...", Toast.LENGTH_LONG);
t.show();
currentUser.save();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
case ACTIVITY_CAMERA_PHOTO:
if(resultCode == RESULT_OK){
Bundle extras = imageReturnedIntent.getExtras();
//THE LINE BELOW THIS ONE GIVES NULLPOINTEREX WHICH IS OBVIOUS BECAUSE IT's ANOTHER //CASE
Bitmap bmp = (Bitmap)extras.get("data");
ByteArrayOutputStream os = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 55, os);
compressedByteArray = os.toByteArray();
bmp = BitmapFactory.decodeByteArray(compressedByteArray, 0, compressedByteArray.length);
iv.setImageBitmap(bmp);
currentUser.put("picture", compressedByteArray);
}
try {
Toast t = Toast.makeText(this, "Uploading picture...", Toast.LENGTH_LONG);
t.show();
currentUser.save();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ResultCode=-1(因此结果_正常)
但这给了我一个错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://media/external/images/media/173 }} to activity {com.tapazz/com.tapazz.ShowProfileActivity}: java.lang.NullPointerException
nullPointerException来自不同的请求代码(请参见上面的“此行”)
应用程序停止了,但当我重新启动它时,我看到它已经像它应该做的那样拾取了照片这可能相关,也可能无关,但是您的开关()
语句在每个案例之后都不会中断。因此,如果它进入ACTIVITY\u SELECT\u PHOTO
案例,它还将处理ACTIVITY\u CAMERA\u PHOTO
switch() {
case 1:
break;
case 2:
break;
}
注意,您总是需要一个中断每个案例结尾的code>语句
好吧,我真是太傻了。。。这就解决了问题。。谢谢男士:p