2017-05-24 2 views
0

J'ai deux activités reçues: A et B.En onActivityResult je reçois valeur nulle de l'intention

Dans l'activité A: On « btn_navSimilarColor » ButtonClick - je fait un appel à B avec startActivityForResult. Il y a déjà quelques intentions dans A pour utiliser la caméra et la galerie et une donnée d'intention que je reçois de l'activité précédente.

Dans l'activité B: Je fait un appel AsyncTask à l'intérieur onCreate() et je suis RENVOYER supplémentaire intention dans onPostExecute de AsyncTask() à l'activité A.

Activité A:

public class A extends Activity 
{ 
... 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    ... 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     edtTxtColorCode.setText(extras.getString("xtra_selectedColor")); 
    } else { 
     Toast.makeText(this, "There was a problem in the response!", Toast.LENGTH_SHORT).show(); 
    } 
} 


public void buttonOnClick(View view) 
{ 
    switch (view.getId()) 
    { 
     case R.id.btnCamera: 
      startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), FLAG_CAMERA); 

      break; 

     case R.id.btnGallery: 
      startActivityForResult(
        new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI), FLAG_GALLERY); 
      break; 

     case R.id.btn_navSimilarColor: 
      Intent intnt_similar = new Intent(A.this, B.class); 
      intnt_similar.putExtra("xtraColor", edtTxtColorCode.getText().toString()); 
      startActivityForResult(intnt_similar, FLAG_navSimilarColorAct); 

      break; 

     default: 
      break; 
    } 

} 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.v("resultCode","="+resultCode); 
    if (resultCode == Activity.RESULT_OK) 
    { 
     mCursor = null; 
     if (requestCode == FLAG_GALLERY) 
      onSelectFromGalleryResult(data); 
     else if (requestCode == FLAG_CAMERA) 
      onCaptureImageResult(data); 
     else if(requestCode == FLAG_navSimilarColorAct) 
     { Bundle extras = getIntent().getExtras(); 
      String stt = extras.getString("intnt_similarColor"); 
      if (extras != null) 

edtTxtColorCode.setText(extras.getString("intnt_similarColor")); 
     } 
    } 
} 
} 

activité B:

public class B extends Activity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
    .... 
    receiveIntent(); 
    new AsyncConver().execute(); 

    } 

    private void receiveIntent() { 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) 
     strIntentrecvdColor = extras.getString("xtraColor"); 
    else 
     Toast.makeText(this, "There was a problem in the response!", Toast.LENGTH_SHORT).show(); 
    } 

    class AsyncConvert extends AsyncTask<String, Integer, String> 
    { 
    ... 
    @Override 
    protected void onPostExecute(String s) 
    { 
     super.onPostExecute(s); 

     Custom_SimilarColorListAdapter gridAdapter = new Custom_SimilarColorListAdapter(SimilarColors.this, list_SimilarColors); 
     grdVw.setAdapter(gridAdapter); 

     grdVw.setOnItemClickListener(new AdapterView.OnItemClickListener() 
     { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
     { 
      String str_colorCodeSimilar = ((TextView) v.findViewById(R.id.listrow_similar_code)).getText().toString(); 
      Toast.makeText(getApplicationContext(), "ID:: "+ str_colorCodeSimilar , Toast.LENGTH_SHORT).show(); 

      Intent retrnIntnt = new Intent(); 
      retrnIntnt.putExtra("intnt_similarColor", str_colorCodeSimilar); 
      setResult(RESULT_OK, retrnIntnt); 
      finish(); 

     } 
     }); 

     } 
    } 

} 

problème:

Maintenant, le problème est que je reçois des données de l'activité B - comme je vérifie déjà avec

Toast.makeText(getApplicationContext(), "ID:: "+ str_colorCodeSimilar , Toast.LENGTH_SHORT).show(); 

Mais dans le onActivityResult de l'activité A je ne reçois pas le paquet de données supplémentaires pour « intnt_similarColor » qui est:

String stt = extras.getString("intnt_similarColor"); 

à la place je reçois paquet supplémentaire pour "xtra_selectedColor" qui est à l'intérieur onCreate().

Pourquoi cela se produit-il et comment puis-je obtenir les données de regroupement précédentes, pas celles qui ont été transmises par l'activité B?

Répondre

1

Get chaîne de l'intention de données que vous recevez de onActivityResult. Vous utilisez où getIntent() est en fait l'intention reçue de la classe A.

Vous devez utiliser:

String stt = data.getStringExtra("intnt_similarColor"); 
2

changement Bundle extras = getIntent().getExtras(); à Bundle extras = data.getExtras();