I have searched quite a few places but i haven’t got up with any good solution that worked yet, and i really need help!
I am making an application that needs to pass a longitude and latitude string from one activity to another.
How can i do this??? Take a look at my code here: The LocationActivity.java needs to pass the string to the other activity and to another one that i didn’t paste into here. And the string that needs to be passed is named: “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) {
}
};
}
The other activity:
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;
}
}
}
In your LocationActivity class:
Intent i = new Intent(this, FindAndroidActivity.class);
i.putExtra("KEY",YourData);
In FindAndroidActivity class
Bundle extras = getIntent().getExtras();
if(extras !=null) {
String value = extras.getString("KEY");
}
Answer:
Couple of scenarios:
-
If you want to pass the string when you start the new activity, then add it to the starting Intent and retrieve it in the new activity’s
onCreate
.
Sending arrays with Intent.putExtra// Sending activity String latLong = "test"; Intent i = new Intent(sendingClass.this, receivingClass.class); i.putExtra("latLong", latLong); startActivity(i); // Receiving activity Bundle extras = getIntent().getExtras(); String latLong = extras.getString("latLong");
-
If you want to pass the string when you return from an activity, then use
startActivityForResult
and implement theonActivityResult
event
http://micropilot.tistory.com/1577 -
The 3rd scenario, passing the string between two activities running at the same time is not possible because only one activity can run (be in the foreground) at a time.
Answer:
Sometimes, Intents become too cumbersome and annoying, instead I use an easier (maybe not optimal) design pattern: the Singleton.
A singleton works like a common storage box reachable by code that sits anywhere in your app, where values are stored while the app’s lifecycle is active. You can also put methods there.
A singleton is a class that can only be instantiated once, and can be used as your one stop warehouse for all the variables that you need to access from everywhere. You can set/get any variable on the singleton from any activity or class, even context!
As I said maybe there are better options, but I don’t have the time to be punishing myself with intents, null pointers and what not.
Create a new class with the following code, call it mySingleton or whatever, and start setting/getting variables from everywhere!:
public class MySingleton extends Application{
private volatile static appSingleton mInstance = null;
private String mystring;
private appSingleton(){
mystring="hello"; //initialize your var here
//Add all the variables you need, here.
public static MySingleton getInstance(){ //Singleton's core
if(mInstance == null){
mInstance = new MySingleton();
}
return mInstance;
}
//Place Set and Get methods here
public String getMystring(){return this.mystring;}
public void setMystring(String s){mystring = s;}
//Add get/setmethods for your other variables here
} //Thats it
Now, lets say you want to set mystring to “goodbye” on Activity B, then do want to do this:
MySingleton.getInstance().setMystring("hello");
If you want to access “mystring” from ANY other Activity, class, etc… and display it on a textbox just do this:
MyTextBox.setText(MySingleton.getInstance().getMystring());
As you can see, you can write values anywhere and read those values from anywhere, with a single line of code. Enjoy!
Answer:
Is your application supposed to be multi threading? If so that opens a whole other can of worms and parsing data back and forth becomes a quite interesting juggle.
Have you looked into the putextra and getextra functions? They work great parsing data back and forth between activities. Though I don’t think those work well with multi threaded applications out of the box.
Tags: androidandroid, string