Le passage des chaînes entre les activités dans android
J'ai cherché un peu partout mais je n'ai pas avec toute la bonne solution qui fonctionnait encore, et j'ai vraiment besoin d'aide!
Je fais une application qui a besoin de passer une longitude et une latitude de la chaîne à partir d'une activité à l'autre.
Comment puis-je faire cela??? Jetez un oeil à mon code ici: LocationActivity.java doit passer la chaîne à l'autre de l'activité et une autre que je n'ai pas le coller ici. Et la chaîne de caractères qui doit être transmise est nommé: "latLongString"
LocationActivity.java:
import android.R.string;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class LocationActivity extends Activity {
private String Location;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LocationManager locManager;
locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f, locationListener);
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateWithNewLocation(location);
if(location != null)
{
double latitude = location.getLatitude();
double longitude = location.getLongitude();
}
}
private void updateWithNewLocation(Location location) {
TextView myLocationText = (TextView)findViewById(R.id.LocationWord);
String latLongString = "";
if (location != null) {
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
//This is where i need to pass the string to the other activity
} else {
latLongString = "No location found";
}
myLocationText.setText("Your Current Position is:\n" +
latLongString);
}
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateWithNewLocation(location);
}
public void onProviderDisabled(String provider) {
updateWithNewLocation(null);
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
}
L'autre activité:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.List;
import java.util.Locale;
import android.R.string;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.os.Bundle;
import android.os.Environment;
import android.telephony.gsm.SmsMessage;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.location.LocationManager;
import android.location.LocationListener;
public class FindAndroidActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
Button Nextbutton1, Nextbutton2, Nextbutton3, TestLocationService, EditSettings;
TextView Cordinates, Adress, FindAndroid, TextView;
EditText LocationWord;
private LocationManager locManager;
private LocationListener locListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.firsttimescreen);
Nextbutton1 = (Button)findViewById(R.id.Nextbutton1);
Nextbutton1.setOnClickListener(this);
}
public void onClick(View src) {
switch(src.getId()) {
case R.id.Nextbutton1:
setContentView(R.layout.setup);
Nextbutton2 = (Button)findViewById(R.id.Nextbutton2);
TestLocationService = (Button)findViewById(R.id.TestLocationService);
TestLocationService.setOnClickListener(this);
Nextbutton2.setOnClickListener(this);
break;
case R.id.Nextbutton2:
setContentView(R.layout.setup1);
Nextbutton3 = (Button)findViewById(R.id.Nextbutton3);
LocationWord = (EditText)findViewById(R.id.LocationWord);
LocationWord.requestFocus(View.FOCUS_DOWN);
Nextbutton3.setOnClickListener(this);
break;
case R.id.Nextbutton3:
setContentView(R.layout.main);
EditSettings = (Button)findViewById(R.id.EditSettings);
EditSettings.setOnClickListener(this);
break;
case R.id.TestLocationService:
Bundle extras = getIntent().getExtras();
if(extras !=null) {
String value = extras.getString("KEY");
}
Cordinates = (TextView)findViewById(R.id.Cordinates);
Cordinates.setText(value);
//This does not work because the string "value" isn't availible outside the braces,
//obviously. How do i make it availible there???
break;
case R.id.EditSettings:
setContentView(R.layout.setup1);
Nextbutton3 = (Button)findViewById(R.id.Nextbutton3);
LocationWord = (EditText)findViewById(R.id.LocationWord);
LocationWord.requestFocus(View.FOCUS_DOWN);
Nextbutton3.setOnClickListener(this);
break;
}
}
}
Vous devez utiliser putExtra() et getExtras() (ou getString) des fonctions à partir de l'Intention de la classe de réponse ici: [PutExtra/GetExtra][1] [1]: stackoverflow.com/questions/5265913/...
OriginalL'auteur Erik | 2012-01-05
Vous devez vous connecter pour publier un commentaire.
Dans votre LocationActivity classe:
Dans FindAndroidActivity classe
OriginalL'auteur kosa
Couple de scénarios:
Si vous souhaitez passer la chaîne lorsque vous démarrez une nouvelle activité, puis l'ajouter à l'Intention de départ, et de la récupérer dans la nouvelle activité du
onCreate
.L'envoi des tableaux avec Intention.putExtra
Si vous souhaitez passer la chaîne lorsque vous revenez d'une activité, puis utilisez
startActivityForResult
et de mettre en œuvre laonActivityResult
événementhttp://micropilot.tistory.com/1577
Le 3ème scénario, en passant la corde entre deux activités en cours d'exécution dans le même temps n'est pas possible car une seule activité peut s'exécuter (au premier plan) à la fois.
OriginalL'auteur Theo
Parfois, les Intentions de devenir trop lourd et ennuyeux, j'utilise plutôt plus facile (peut-être pas optimal) modèle de conception: le Singleton.
Un singleton fonctionne comme une boîte de rangement accessible par le code qui se trouve n'importe où dans votre application, où les valeurs sont stockées, tandis que l'application du cycle de vie est actif. Vous pouvez également placer des méthodes.
Un singleton est une classe qui ne peut être instanciée une fois, et peut être utilisé comme un arrêt de l'entrepôt pour toutes les variables que vous avez besoin d'accéder de partout. Vous pouvez définir/obtenir n'importe quelle variable sur le singleton de toute activité ou de la classe, même contexte!
Comme je l'ai dit peut-être il ya de meilleures options, mais je n'ai pas le temps de les punir moi-même avec les intentions, les pointeurs null et ce n'est pas.
Créer une nouvelle classe avec le code suivant, l'appeler mySingleton ou que ce soit, et le paramètre de début/d'obtenir des variables de partout!:
Maintenant, disons que vous souhaitez définir machaine "au revoir" sur l'Activité B, alors voulez-vous faire ceci:
Si vous souhaitez accéder à "machaine" de TOUTE autre Activité, la classe, etc... et l'afficher dans un textbox viens de le faire:
Comme vous pouvez le voir, vous pouvez écrire des valeurs de n'importe où et de lire ces valeurs à partir de n'importe où, avec une seule ligne de code. Profitez-en!
MySingleton.getInstance().setMystring("hello");
qui est l'endroit où vous êtes mentionner à définir la chaînegoodbye
, je pense qu'il devrait êtreMySingleton.getInstance().setMystring("goodbye");
. J'ai essayé cela, mais mon string ne change pas pourgoodbye
, il restehello
.que "bonjour" valeur ne survivra que grâce à l'application du cycle de vie, ce qui signifie que si vous fermez l'application ou le système d'exploitation Android tue votre application, cette valeur disparaît. Utilisation sharedpreferences pour que la chaîne de persister "définitivement".
OriginalL'auteur Josh
Votre demande est censé être multi threading? Si oui, que s'ouvre une autre boîte de pandore et l'analyse des données en arrière devient tout à fait intéressant jongler.
Avez-vous regardé dans le putextra et getextra fonctions? Ils travaillent beaucoup l'analyse des données à l'arrière-et-vient entre les activités. Bien que je ne pense pas que ceux qui travaillent bien avec multi threaded applications hors de la boîte.
OriginalL'auteur aseq