GetIntent (). GetExtras () pasa valores nulos en OnActivityResult

Estoy pasando un contexto de una actividad-A a un adaptador de página y dentro de ese adaptador estoy pasando una intención de hacer una llamada

Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:" + number)); intent.putExtra("id",listId.toString()); context.startActivityForResult(intent, 105); 

La Actividad A se hereda de otra Actividad B y dentro de esa base Actividad B, onActivityResult se define como:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == 104) { if (GetLocation.isLocationEnabled(this)) { <my codes> } } } 

Dentro de la Actividad A estoy teniendo OnActivityResult como:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == 105) { Bundle extras=getIntent().getExtras(); String user_Id=extras.getString("id"); } } 

Siempre estoy recibiendo un valor nulo para user_Id, ¿Puede alguien ayudarme en este problema?

intent.getExtras() lugar de getIntent().getExtras()

getIntent() obtendrá la intent que lanzó su actividad originalmente.

Podría estar equivocado pero en lugar de usar getIntent (). Creo que sólo querrá usar la intención pasada a OnActivityResult en la firma del método.

El uso de startActivityForResult () es para cuando se quiere que una Actividad inicie otra Actividad, pero luego haga que la segunda Actividad devuelva algún tipo de resultado a la primera cuando termine. Así que un ejemplo sería la Actividad A que inicia la Actividad B, y luego cuando la Actividad B termina, envía una respuesta a la Actividad A. Por lo tanto, hay algunos pasos que debe tomar para lograrlo.

Primero, necesitas iniciar tu segunda Actividad …

 Intent intent = new Intent(this, YourSecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("yourStringExtra", theStringExtra); intent.putExtras(bundle); startActivityForResult(intent, 1); 

Cuando esté listo para finalizar su segunda Actividad, deberá configurar el resultado para que envíe de nuevo a la primera Actividad. Haces eso así …

 Intent intent = new Intent(); intent.putExtra("string_result_from_second_activity", stringResult); setResult(RESULT_OK, intent); finish(); 

Después de que la segunda Actividad termine, se reinicia la primera Actividad y se puede interceptar el resultado de la segunda Actividad Anulando onActivityResult () así …

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 1) { if(resultCode == RESULT_OK) { String resultString = data.getStringExtra("string_result_from_second_activity"); } } } 

Por lo tanto, en este ejemplo, la segunda Actividad envía la cadena stringResult nuevo a la primera Actividad cuando termina junto con el RESULT_OK resultCode. Por lo tanto, comprueba el requestCode (que definimos como "1" cuando llamamos startActivityForResult () en la primera Actividad), luego asegúrate de que resultCode es RESULT_OK , y entonces seguimos adelante y accedemos a la cadena extra del Intent.

Espero que esto aclare las cosas!

Supongo que tienes otro problema que getIntent en lugar de intención. Podría haber malinterpretado tu pregunta, pero creo que tienes toda la cosa onActivityResult equivocada.

OnActivityResult sólo se llama si una actividad que ha iniciado con startActivityForResult ha finalizado. Entonces usted necesita comprobar si el ResultCode devuelto es igual a RESULT_OK y si el requestCode coincide con el requestCode con el que inició esa actividad.

Para establecer un resultado antes de finalizar necesitas hacer lo siguiente:

 Intent intent = getIntent(); intent.putExtra("id",listId.toString()); //Your ID comes here setResult(RESULT_OK, intent); finish(); 

EDITAR

Como leí en el comentario, desea informar a la actividad de subyacente de un PageAdapter. Por lo tanto, debe declarar una interfaz en su actividad

 public interface IdListener{ void onIdSelected(int id); } 

Pasar una nueva instancia de esta interfaz a su actividad. Tal vez en el constructor de su PageAdapter (crear uno personalizado). Antes de iniciar Intent, llame al método interfaces.

 idListener.onIdSelected(yourID); context.startActivity(intent); //don't call startActivityForResult(), you dont need it 

Aún no entiendo lo que estás tratando de lograr. Pero tal vez eso se adapte a sus necesidades más de lo que intentó antes.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.