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é.
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)) {
....
}
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");
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");
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
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();
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"