onActivityResult在第二次调用时返回intent data = null

问题描述:

我知道有关于此主题的答案,但其行为与其他问题不同。onActivityResult在第二次调用时返回intent data = null

我有一个片段,有两个按钮与两个不同的onClick方法。每个onClick方法启动一个startActivityForResult(),但在片段中的onActivityResult(int requestCode,int resultCode,Intent data)方法中,只有其中一个活动的resultCode正确。

让我的代码和一个例子解释一下:

片段:

@Override 
public void onClick(View view) { 
    int id = view.getId(); 
    switch (id) { 

     case R.id.fab: 
      Log.e(LOG_TAG, getActivity().toString()); 
      Intent intent = new Intent(getActivity(), AnadirAlimentoActivity.class); 
      startActivityForResult(intent, 2); 
      break; 

    } 
} 

这AnadirAlimentoActivity是如预期那样工作正是一个。

AnadirAlimentoActivity:

当你已经结束项目添加到您可以点击后退按钮列表,并且触发这个方法:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(); 
    intent.putExtra(AppConstant.LISTA_ALIMENTOS_SELECCIONADOS, alimentosSeleccionados); 
    setResult(RESULT_OK, intent); 
    finish(); 
} 
在片段

而现在的OnActivityResult方法被正确的resultCode,requestCode和数据触发

片段:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 2) { 
     ArrayList<Alimento> alimentos = data.getParcelableArrayListExtra(AppConstant.LISTA_ALIMENTOS_SELECCIONADOS); 
     if (alimentos != null) { 
      for (Alimento alimento : alimentos) { 
       Log.e("alimento devuelto", alimento.getDescripcion() + " cantidad: " + String.valueOf(alimento.getCantidad()) 
         + " proc: " + alimento.getProcedencia()); 
       mAlimentos.add(alimento); 
      } 
     } 
     popularLista(); 
     isEnviarAlimento(); 
    } else { 
     if (requestCode == 3) { 
      if (data != null) { 
       String remanente = data.getStringExtra(AppConstant.INSULINA_REMANENTE); 
       if (remanente != null) { 
        _insulinaRemanente.setText(remanente); 

       } 
      } 
     } 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

那么问题是,当你点击另一个按钮,即启动其他活动的一个(在片段太多,但内的AsyncTask onPostExecute方法)

片段(这个片段类中有一个私有类扩展的AsyncTask)

 @Override 
    protected void onPostExecute(Boolean aBoolean) { 
     super.onPostExecute(aBoolean); 
     if (!aBoolean) { 
      Toast.makeText(getActivity().getApplicationContext(), "Ha ocurrido un error por favor vuelve a intentarlo", Toast.LENGTH_LONG).show(); 
     } else { 
      Intent intent = new Intent(getActivity(), MostrarInsulinaActivity.class); 
      Log.e(LOG_TAG, getActivity().toString()); 
      startActivityForResult(intent, 3); 
     } 
     if (progressDialog != null && progressDialog.isShowing()) 
      progressDialog.dismiss(); 
    } 

而且在

MostrarInsulinaActivity

当你按后退按钮再次

MostrarInsulinaActivity:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent _intent = new Intent(); 
    _intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa"); 
    setResult(RESULT_OK, _intent); 
    finish(); 

} 

我做的一样,在其他类期待究竟表现为前一后,但finish()会调用片段中的OnActitivyResult方法,该方法使用正确的requestCode,但使用resultCode == 0和th e数据意图=空。

这是怎么发生的?是因为AsynTask?

我有点失落,我不知道该从哪里出发。

谢谢你这么多

我要回答我的问题只是别人谁可能设置之前,面临着同样的问题..

的事情是,我的第二个活动我打电话super.onBackPressed();我意图,所以这是我作出的变化:

@Override 
public void onBackPressed() { 
    Intent _intent = new Intent(); 
    _intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa"); 
    setResult(RESULT_OK, _intent); 
    finish(); 
    super.onBackPressed(); 
} 
+0

谢谢,这真的帮了我:) –

+0

不客气@ FelipeRibeiroR.Magalhaes – neteot