2011-05-28 3 views
1

Qu'est-ce que je fais de mal? J'ai regardé d'autres questions et pensé que je faisais exactement les mêmes choses, mais comme cela ne fonctionne pas pour moi, évidemment, je fais quelque chose de mal!Envoyer un paquet/des données à une autre classe ou à un autre écran

J'ai mon MainActivity.class qui obtient des données JSON (coordonnées) d'une URL. Cette partie fonctionne. Je veux ensuite charger un MapView, appelé OverlayActivity.class, et envoyer ces données à cette carte afin que je puisse le peupler avec des superpositions, etc. Je tire un nombre variable de points vers le bas et crée dynamiquement des boutons. Selon le bouton sur lequel vous cliquez, il envoie des données différentes. Voici le code pour cette boucle:

final LinearLayout layout = (LinearLayout) findViewById(R.id.menuLayout); 
layout.removeAllViewsInLayout(); 
String itemName=""; 
int itemID=0; 
for (int i = 0; i < dataSetsMap.size(); i++) { 
    itemID=i+1; 
    itemName=dataSetsMap.get(itemID); 
    Button b = new Button(this); 
    b.setText(itemName); 
    layout.addView(b); 

    // These need to be final to use them inside OnClickListener() 
    final String tempName=itemName; 
    final int tempID=itemID; 

     b.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
       Intent i = new Intent(); 
       Bundle b = new Bundle(); 

       i.setClass(myContext, OverlayActivity.class); 
       Log.i(TAG, "Setting extras: 1:"+tempName+" and 2:"+tempID); 
      b.putInt(tempName, tempID); 
       i.putExtras(b); 
       startActivity(i); 
       } 
      }); 
} // End for() 

Alors, évidemment, je veux lire ces données de l'autre côté, en supposant que je te l'envoie correctement. Donc, pour le lire, je l'ai essayé quelques choses différentes:

 //Method 1: 
    String test1=intent.getStringExtra("name"); 
     String test2=intent.getStringExtra("id"); 

    //Method 2: 
     String meh=getIntent().getExtras().getString("id").toString(); 
     String bleh=getIntent().getExtras().getString("name"); 

     //Method 3: 
     String value=savedInstanceState.getString("name"); 
     String id=savedInstanceState.getString("id").toString(); 

     //Method 4: 
     Bundle bundle = getIntent().getExtras(); 
     String id=bundle.getString("id"); 
     String value = getIntent().getExtras().getString("name"); 

je reçois un NullPointerException en essayant d'utiliser l'une de ces méthodes. C'est la première fois que j'utilise ce type de méthodes, alors quelqu'un peut-il me diriger dans la bonne direction ou me dire où je me suis trompé?

+0

Etes-vous sûr que 'l'intention 'n'est pas' nu ' ll' et/ou que 'getIntent()' ne retourne pas 'null'? D'où vient le NPE? – QuantumMechanic

+0

Chaque ligne du 2ème bloc de code provoque une NPE lorsqu'elle est seule. Je l'ai eu en travaillant avec les réponses ci-dessous cependant. Merci. – eoinzy

Répondre

1

Tout d'abord, en utilisant Bundle b lorsque vous avez déjà Button b est pas vraiment une bonne idée si pour aucune autre raison que cela devient confus,;)

Deuxièmement, vous n'avez pas besoin d'utiliser un ensemble de passer une chaîne et un int. Il suffit de les ajouter à votre intention ... directement

Intent i = new Intent(myContext, OverlayActivity.class); 
i.putExtra("name", tempName); 
i.putExtra("id", tempID); 
startActivity(i); 

Pour les récupérer dans l'utilisation de OverlayActivity ...

Intent i = getIntent(); 
String name = i.getStringExtra("name"); 
int id = i.getIntExtra("id", -1); // -1 in this case is a default value to return if id doesn't exist 
+0

Cela a fonctionné! Merci! – eoinzy

+0

@eoinzy: Heureux que cela a aidé. – Squonk

1

Pourquoi ne pas faire ceci:

Intent i = new Intent(); 
       i.setClass(myContext, OverlayActivity.class); 
       Log.i(TAG, "Setting extras: 1:"+tempName+" and 2:"+tempID); 
      i.putExtra("name", tempName); 
      i.putExtra("id", tempID); 
       startActivity(i); 

et vous peut les récupérer avec:

String name = getIntent().getStringExtra("name", ""); 
    int id = getIntent().getIntExtra("id", 0); 
+0

Merci, cela a également fonctionné mais j'ai accepté celui ci-dessus parce qu'il a été répondu en premier. PS, 'getIntent(). GetStringExtra (" nom ");' est le bon format. La valeur de retour par défaut supplémentaire ne fonctionnait pas sur la chaîne, seulement l'int. Merci encore. – eoinzy

Questions connexes