2017-01-25 2 views
2

Je suis confronté à un problème étrange en revenant à une activité avec un résultat, je passe une intention pour startActivityForResult d'un adaptateur comme celui-ci:intention onActivityResult est nulle en passant intention de l'adaptateur

Intent i = new Intent(activity, EditInfoActivity.class); 
i.putExtra("id", list.get(position).getID()); 
activity.startActivityForResult(i, 100); 

et seconde activité ie dans EditInfoActivity dans mon cas un clic Button Je suis en train résultat pour la première activité comme ceci:

Intent i = getIntent(); 
i.putExtra("isDataChange", isDataChange); 
setResult(100, i); 
finish(); 

dans la méthode onActivityResult d'activité, je suis en mesure d'obtenir le code résultat mais obtenir Intentnull.

Pourquoi? quelqu'un a une idée à ce sujet s'il vous plaît partager.

en activité:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 100) { 
    //Here data is null and app crash 
    if (data.getExtras() != null && data.getBooleanExtra("isDataChange", false)) { 
     recreate(); 
    } 
    } 
} 

Répondre

2

Tout d'abord, vous devez commencer l'activité avec un REQUEST_CODE:

// Here we set a constant for the code. 
private final int REQUEST_CODE = 100; 

Intent i = new Intent(activity, EditInfoActivity.class); 
i.putExtra("id", list.get(position).getID()); 
activity.startActivityForResult(i, REQUEST_CODE); 

Ensuite, vous devez envoyer RESULT_OK lors de la finition EditInfoActivity :

Intent i = getIntent(); 
i.putExtra("isDataChange", isDataChange); 
setResult(RESULT_OK, i); 
finish(); 

poignée Ensuite, le résultat sur votre première activité avec ceci:

Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // REQUEST_CODE is defined as 100 
    if (resultCode == RESULT_OK && requestCode == 100) { 
    // do process 
    } 
} 
+0

Merci cela fonctionne –

+0

@KapilRajput: De rien;) –

2

setResult PREND RESULT_CODE au lieu de REQUEST_CODE. Remplacez votre code par ceci, peut être que cela résoudra votre problème.

setResult(RESULT_OK, i); 

Et dans yout onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
    //Here data is null and app crash 
     if (data != null && data.getBooleanExtra("isDataChange", false)) { 
      recreate(); 
     } 
    } 
} 
2

Deux erreurs. Vous passez l'intention qui a été utilisée pour lancer l'activité que vous terminez. Utilisez new Intent() à la place.

Lors de la définition du résultat d'activité, vous devez utiliser des codes de résultat, et non un code de requête setResult(RESULT_OK) ou RESULT_CANCELED et gérer la réponse en conséquence.