2017-09-22 4 views
-4

Je suis nouveau sur Android et Java. J'essaie de capturer des valeurs dans une activité et de les transmettre à une autre activité en utilisant un paquet. Le bundle est créé OK. Mais quand j'essaie d'extraire les valeurs dans la deuxième activité, j'obtiens des valeurs nulles. Qu'est-ce que je fais mal? Activité principaleAndroid Recevoir du texte dans les renvois groupés Null

//Create the bundle 
Bundle mybundle = new Bundle(); 
//Add your data to bundle 
mybundle.putString("One",textOne); 
mybundle.putString("Two",textTwo); 
//Add the bundle to the intent 
myIntent.putExtras(mybundle); 
//Fire the second activity 
startActivity(startIntent); 

Voici le code pour obtenir le texte dans la deuxième activité

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
Bundle mybundle = getIntent().getExtras(); 
String myText1 = mybundle.getString("One"); 
String myText2 = mybundle.getString("Two"); 

OK. Je vais partager tout mon code. J'essaie un programme très simple pour apprendre Android. Entrez deux nombres à ajouter ensemble sur le premier écran. Avoir la réponse affichée sur un deuxième écran en utilisant un paquet pour passer les valeurs du premier écran au second écran.

Activité principale

public class MainActivity extends AppCompatActivity { 
EditText editNum1; 
EditText editNum2; 
Button addbutton; 
@Override 
protected void onCreate(Bundle savedInstanceState) {   
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
editNum1 = (EditText) findViewById(R.id.editNum1); 
editNum2 = (EditText) findViewById(R.id.editNum2); 
Button addbutton = (Button) findViewById(R.id.button); 
addbutton.setOnClickListener(new View.OnClickListener(){ 
@Override 
public void onClick(View view){ 
Intent myIntent = new Intent(MainActivity.this, 
AddActivity.class); 
final String textOne = editNum1.getText().toString().trim(); 
final String textTwo = editNum2.getText().toString().trim(); 
//Create the bundle 
    Bundle mybundle = new Bundle(); 
//Add your data to bundle 
mybundle.putString("One",textOne); 
mybundle.putString("Two",textTwo); 
//Add the bundle to the intent 
myIntent.putExtras(mybundle); 
//Fire the second activity 
startActivity(myIntent); 

OK Maintenant, le code de l'écran AddActivity J'ai inséré quelques lignes de débogage qui ne fonctionnent pas non plus

public class AddActivity extends AppCompatActivity { 
    Number gNum1; 
    Number gNum2; 
    Number total; 
    String myText1; 
    String myText2; 
    TextView textView; 
    TextView textView2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Bundle mybundle = getIntent().getExtras(); 
    if (mybundle != null) { 
     String myText1 = mybundle.getString("One"); 
     String myText2 = mybundle.getString("Two"); 
    } 
    textView = (TextView)findViewById(R.id.textView); 
    if (myText1 != null) { 
     textView.setText(myText1); 
    }else { 
     textView.setText("FAILED"); 
    } 

    textView2 = (TextView)findViewById(R.id.textView2); 
    if (myText1 != null) { 
     textView2.setText(myText1); 
    }else{ 
     textView2.setText("FAILED"); 
+0

Votre code est ok. Peut-être que textOne ou textTwo est nul. Comment l'obtenez-vous? –

+0

pouvez-vous s'il vous plaît mettre votre code d'intention ici. Parce que vous avez envoyé des données avec 'startExtras (mybundle)' intention de départ avec 'startActivity (startIntent)'. – UltimateDevil

+1

Vous ajoutez bundle à myIntent et vous passez l'intention différente (startIntent) pouvez-vous s'il vous plaît ajouter le code complet. – livemaker

Répondre

0

Vous ajoutez paquet à myIntent et vous passer Bundle différents Intent intent(startIntent)

utilisent ce

//Create the bundle 
Bundle mybundle = new Bundle(); 
//Add your data to bundle 
mybundle.putString("One",textOne); 
mybundle.putString("Two",textTwo); 
//Add the bundle to the intent 
startIntent.putExtras(mybundle); 
//Fire the second activity 
startActivity(startIntent); 

insted de cette

//Create the bundle 
Bundle mybundle = new Bundle(); 
//Add your data to bundle 
mybundle.putString("One",textOne); 
mybundle.putString("Two",textTwo); 
//Add the bundle to the intent 
myIntent.putExtras(mybundle); 
//Fire the second activity 
startActivity(startIntent); 

REMARQUE: si vous obtenez la valeur de Textview ou Editext que

utilisent ce

textOne.getText().toString().trim()

insted de cette

textOne 
+0

J'ai coupé le texte et vérifié que j'avais le bon nom d'intention dans la ligne startActivity, mais je reçois toujours un paquet Null dans ma deuxième activité. Laissez-moi partager tout mon code – Pickles57

+0

partager tout votre code @ Pickles57 –

+0

@ Pickles57 vous avez oublié ajouter ** setContentView (R.layout.activity_main); ** dans votre ** AddActivity ** –

0

vous mettez ensemble dans myIntent mais vous commencez votre activité avec startIntent c'est la raison pour laquelle vous obtenez NULL

2

vous devez ajouter bundle dans l'intention qui commence l'activité. S'il vous plaît utiliser le code ci-dessous

startActivity(myIntent); 
+0

J'ai changé cela et j'obtiens toujours des valeurs Null. Voir le code complet révisé ci-dessus – Pickles57

0

Dans la première activité tout en créant ajouter bundle à l'intention selon vous voulez commencer l'activité.

i.e Dans la première activité

//Create the bundle 
Bundle mybundle = new Bundle(); 

//Add your data to bundle 
mybundle.putString("One",textOne); 
mybundle.putString("Two",textTwo); 

//Add the bundle to the intent 
myIntent.putExtras(mybundle); 

//Fire the second activity with your bundle added intent 
startActivity(myIntent); 

Puis, dans la deuxième activité faire un chèque nul pour paquet, puis le récupérer

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

Bundle mybundle = getIntent().getExtras(); 

if(mybundle!=null){ 
    String myText1 = mybundle.getString("One"); 
    String myText2 = mybundle.getString("Two"); 
} 
0
Bundle mybundle = new Bundle(); 
mybundle.putString("One",textOne); 
mybundle.putString("Two",textTwo); 
myIntent.putExtras(mybundle); 
startActivity(myIntent); 

utilisation myIntent au lieu de startIntent. Étant donné que vous avez ajouté bundle à myIntent, vous ne pouvez pas accéder à ce bundle Activity qui est invoqué par un autre Intention.

0

Vous ajoutez le bundle dans myIntent et démarrez l'Activity avec startIntent. Il faut donc utiliser le code ci-dessous

startActivity(myIntent); 

maintenant sur l'autre chèque d'activité si la getIntent n'est pas nul alors chercher le Bundle de l'intention.

+0

Correction de cela. Ne fonctionne toujours pas – Pickles57

+0

Essayez d'utiliser la condition if (null! = GetIntent()) pour obtenir un meilleur résultat. Parfois, nullpointerexception est également résolu en vérifiant la condition de cette manière. – Meet