1

имеет три действия A, B, C, в действии A намерение открывает активность B. На активность B startActivityForResult вызывается и открывается C. но после вызова setResult в C он возвращается к Activity А, не до в я копируя свой код активности, где РМКО начала деятельность призвания создать событиеStartActivityForResult не возвращает данные в родительскую активность

 @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(); 
     } 
    } 

пожалуйста, помогите мне решить это, возвращение страницы i S другого вида деятельности

+0

Вы завершаете операцию B до того, как вызвали мероприятие C? –

+0

@sohanshetty no –

+0

укажите имя класса, так что будет ясно, из какого класса вы вызываете класс –

ответ

0

Надеется, что вы должны исправить вашему requestCode

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); 
+0

Я изменил код запроса, но он еще не работает –

+0

@JoseAntony Попробуйте отладить и подтвердить, входит ли он в onActivityResult или нет? – Sridhar

0
First a fall you need to check the flow of control of your code, whether its going in correct blocks or not. 

В качестве альтернативы вы можете следовать следующему раствору (если вы хотите), вместо использования startActivityForResult() вы можете использовать onNewIntent() как метод обратного вызова.

You need to follow few steps. 

Шаг 1: Объявите launchMode своего 'CreateEventActivity', как "singleTask" в вашем AndroidManifest.xml

Пример:

<activity android:name=".CreateEventActivity" android:launchMode="singleTask"/> 

Шаг 2 : Переопределение onNewIntent() в вашем 'CreateEventActivity'

Пример:

@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

Пример

С '' CreateEventActivity

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

От 'CropImageActivity'

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

Примечание: Не беспокойся экземпляр активности B не будет создавать снова и снова. Попробуйте это решение, если вы не смогли найти проблему w.r.t startActivityForResult().

Смежные вопросы