web-dev-qa-db-fra.com

Passer des données d'une activité à une autre à l'aide de l'ensemble - ne pas afficher dans la deuxième activité

J'essaie actuellement de prendre les données acquises via un appel d'API REST, de les analyser pour obtenir les informations dont j'ai besoin, puis de les transmettre à une nouvelle activité. J'utilise le client HTTP asynchrone de loopj.com pour le client REST, puis j'utilise le code ci-dessous pour ma onClick et onCreate pour les activités actuelles et futures, respectivement. 

Eclipse ne me transmet aucune erreur pour aucun de mes codes, mais lorsque je tente de fonctionner dans l’émulateur, je n’obtiens rien (c’est-à-dire un écran blanc vide) lorsque la nouvelle activité/vue s’ouvre. J'ai essayé de coder avec une URL différente dans mon REST CLIENT, mais je ne vois toujours rien. J'ai même retiré l'appel de l'API de l'équation en commentant la tentative/interception dans onClick et en changeant venueName dans bundle.putString("VENUE_NAME", venueName); en searchTerm. Malgré tout, la nouvelle vue apparaît mais rien ne s’affiche. Qu'est-ce qui n'est pas adopté ou qu'est-ce que j'oublie de faire montrer à la deuxième activité le venueName?

public void onClick(View view) {
    Intent i = new Intent(this, ResultsView.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String searchTerm = editText.getText().toString();


    //call the getFactualResults method
    try {
        getFactualResults(searchTerm);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //Create the bundle
    Bundle bundle = new Bundle();
    //Add your data from getFactualResults method to bundle
    bundle.putString("VENUE_NAME", venueName);  
    //Add the bundle to the intent
    i.putExtras(bundle);

    //Fire the second activity
    startActivity(i);
}

Méthode de la deuxième activité qui doit recevoir l’intention et le regroupement et les afficher:

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

    //Get the message from the intent
    //Intent intent = getIntent();
    //String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    //Get the bundle
    Bundle bundle = getIntent().getExtras();

    //Extract the data…
    String venName = bundle.getString(MainActivity.VENUE_NAME);        

    //Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(venName);

    //set the text view as the activity layout
    setContentView(textView);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }
}

Merci de votre aide. Très apprécié.

15
user2163853

Vous pouvez envoyer les données de deux manières. Voici comment vous l'envoyez en ce moment. Et il n'y a rien de mal à cela.

//Create the bundle
Bundle bundle = new Bundle();
//Add your data from getFactualResults method to bundle
bundle.putString("VENUE_NAME", venueName);
//Add the bundle to the intent
i.putExtras(bundle);
startActivity(i);

Dans votre code (deuxième activité), vous vous référez à key dans le paquet par MainActivity.VENUE_NAME, mais rien dans le code n'indique que vous avez une classe qui renvoie la valeur sous le nom key envoyé avec le paquet. Changez votre code dans la deuxième activité en ceci:

Bundle bundle = getIntent().getExtras();

//Extract the data…
String venName = bundle.getString("VENUE_NAME");        

//Create the text view
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(venName);

Vous pouvez vérifier dans votre deuxième activité si le paquet contient la clé qui l'utilise et vous saurez que la variable key n'est pas présente dans le paquet. La correction ci-dessus, cependant, le fera fonctionner pour vous.

if (bundle.containsKey(MainActivity.VENUE_NAME))    {
    ....
}
22
Siddharth Lele

Je pense que si vous remplacez 

String venName = bundle.getString(MainActivity.VENUE_NAME); 

avec 

String venName = bundle.getString("VENUE_NAME");

ça devrait marcher. 

Voici comment je gère mon transfert de données d'une activité à une autre:

Envoi de données à une activité appelée "Projectviewoptions":

Bundle b = new Bundle();
          b.putString("id", str_projectid);
          Projectviewoptions pv = new Projectviewoptions();

Réception de données:

idbundle = getArguments();
String myid = idbundle.getString("id");

La "clé" des deux côtés devrait être la même; dans ce cas "id".

Une autre façon d’envoyer des données, par intention, est:

Envoyer:

Intent intent = new Intent(getActivity(),ViewProjectDetails.class);
                            intent.putExtra("id", myid);
                            startActivity(intent);

Recevoir:

String id = getIntent().getExtras().getString("id");
5
krtkush

Vous accédez à tort à la clé que vous avez ajoutée dans l’ensemble. En plus d'obtenir la chaîne en tant que MainActivity.VENUE_NAME, essayez de passer directement le nom de clé que vous avez ajouté dans le paquet comme ci-dessous: 

En plus d'obtenir une chaîne comme ci-dessous: 

   //Get the bundle
     Bundle bundle = getIntent().getExtras();
    //Extract the data…
   String venName = bundle.getString(MainActivity.VENUE_NAME);        

Essayez d’obtenir la chaîne en utilisant le nom de clé ci-dessous: 

    /Get the bundle
     Bundle bundle = getIntent().getExtras();
    //Extract the data…
   String venName = bundle.getString("VENUE_NAME");  
3
GrIsHu

envoyer un paquet.

Bundle bundle = new Bundle();
bundle.putString("Name",Object); //This is for a String
i.setClass(CurrentClass.this, Class.class);
i.putExtras(bundle);
startActivity(i);

recevoir un paquet

Bundle bundle = null;
bundle = this.getIntent().getExtras();
String myString = bundle.getString("Name");//this is for String  
1
Andre Viau
Intent loginIntent = new Intent(LoginActivity.this, HomeActivity.class);

Bundle bundle = new Bundle(); 


bundle.putString("user_id", userId);

i.putExtras(bundle);

startActivity(loginIntent);

LoginActivity.this.finish();
0
Anand Phadke

Assurez-vous que la chaîne que vous avez utilisée comme clé pour placer l'élément dans votre ensemble est identique à la clé utilisée pour l'extraire. Dans votre cas, peut-être que MainActivity.VENUE_NAME est différent de "VENUE_NAME"

0
Karakuri