Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android StartActivityForResult未将数据返回到父活动_Android_Android Intent_Android Activity_Startactivityforresult - Fatal编程技术网

Android StartActivityForResult未将数据返回到父活动

Android StartActivityForResult未将数据返回到父活动,android,android-intent,android-activity,startactivityforresult,Android,Android Intent,Android Activity,Startactivityforresult,有三个活动A、B、C,在活动A中,意图打开活动B。在活动B上调用startActivityForResult并打开C。但在C中调用setResult后,它将返回到活动A而不是B 我正在复制我的活动代码,我正在调用开始活动创建事件 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode,

有三个活动A、B、C,在活动A中,意图打开活动B。在活动B上调用startActivityForResult并打开C。但在C中调用setResult后,它将返回到活动A而不是B 我正在复制我的活动代码,我正在调用开始活动创建事件

     @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SELECT_FILE) {
        if (resultCode == Activity.RESULT_OK) {

            alertDialogBox.dismiss();
            Intent image = new Intent(CreateEventActivity.this, CropImageActivity.class);
            image.putExtra("data", data.getData().toString());
            startActivityForResult(image, 2);

        }

    }
    if (requestCode == 2) {
        if (resultCode == Activity.RESULT_OK) {
            String bt = data.getStringExtra("result");
            file_path = data.getStringExtra("filepath");
            testPath = new File(file_path);
            Log.e("desti", testPath.toString());
            Log.e("destpat", testPath.getAbsolutePath());
            try {
                testPath.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                byte[] encodeByte = Base64.decode(bt, Base64.DEFAULT);
                bitmap2 = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);

                //  imageforUpload = getStringImage(bitmap2);
                BitmapFactory.Options options = new BitmapFactory.Options();

                // down sizing image as it throws OutOfMemory Exception for larger
                // images
                options.inSampleSize = 8;

                final Bitmap bitmaptest = BitmapFactory.decodeFile(file_path, options);

                imgCropped.setVisibility(View.VISIBLE);
                imgCropped.setImageBitmap(bitmaptest);


            } catch (Exception e) {
                e.getMessage();

            }
        }
    }
}
第二个活动cropActivity,我将数据返回给父级

     private final CropCallback mCropCallback = new CropCallback() {
    @Override
    public void onSuccess(Bitmap cropped) {
        int height = cropped.getHeight();
        int width = cropped.getWidth();
        if (height<400||width<400){
            Toast.makeText(getApplicationContext(),"this image cat be cropped",Toast.LENGTH_SHORT).show();
        }else {

            Bitmap bitmap = Bitmap.createBitmap(cropped, 0, 0, 400, 400);


            imgtest.setImageBitmap(bitmap);
            SaveImage(bitmap);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
            byte[] b = baos.toByteArray();
            String temp = Base64.encodeToString(b, Base64.DEFAULT);


            Intent returnIntent = new Intent();
            returnIntent.putExtra("result", temp);
            returnIntent.putExtra("filepath", filePath);
            setResult(Activity.RESULT_OK, returnIntent);
            finish();
        }
    }
private final CropCallback mCropCallback=new CropCallback(){
@凌驾
成功时的公共无效(位图裁剪){
int height=crapped.getHeight();
int width=crapped.getWidth();

如果(高度希望您必须更正您的请求代码

Intent returnIntent = new Intent();
returnIntent.putExtra("result", temp);
returnIntent.putExtra("filepath", filePath);
setResult(2, returnIntent);
finish();
因为你在这里也提到过

Intent image = new Intent(CreateEventActivity.this, CropImageActivity.class);
image.putExtra("data", data.getData().toString());
startActivityForResult(image, 2);
或者您可以遵循以下解决方案(如果您愿意),而不是使用startActivityForResult()您可以使用onNewIntent()作为回调方法

You need to follow few steps.
步骤1:在AndroidManifest.xml中将“CreateEventActivity”的启动模式声明为“singleTask

示例:

 <activity android:name=".CreateEventActivity" android:launchMode="singleTask"/>
 @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if(intent!=null)
        {
            // YOU CAN CHECK FLAGS OVER HERE, BY PASSING THE VALUES THROUGH INTENTS from different other activities
             if(intent.getBooleanExtra("IS_COMING_FROM_CROP_ACTIVITY",false)
             {
                // HANDLE YOUR STUFF
             }
        }
    }
步骤3:如何触发此回调 只需使用startActivity(),即startActivity(B,C),一旦“活动C”完成,就可以使用startActivity(C,B)并调用活动C上的finish()

示例

来自“CreateEventActivity”

startActivity(new Intent(CreateEventActivity.this, CropImageActivity.class));
来自“CropImageActivity

startActivity(new Intent(CropImageActivity.this, CreateEventActivity.class));
finish();

注意:不要担心活动B实例不会一次又一次创建。如果您无法找到问题w.r.t startActivityForResult()请尝试此解决方案.

您是否在调用活动C之前完成了活动B?@sohanshetty请提供类名,这样就可以清楚地知道您从哪个类调用了哪个类class@JoseAntony当您使用StartActivityForResult启动活动时,它来自哪个活动?因为我看到您已经在OnActivityResultMa中实现了代码确保您没有在“执行startActivityForResult(您的意图,选择文件)”之前或之后调用finish();我已更改了请求代码,但它不起作用yet@JoseAntony尝试调试并使其确认它是否进入ActivityResult内部?
startActivity(new Intent(CropImageActivity.this, CreateEventActivity.class));
finish();