Passing strings between activities in android

37,215

Solution 1

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");
}

Solution 2

Couple of scenarios:

  1. 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");  
    
  2. If you want to pass the string when you return from an activity, then use startActivityForResult and implement the onActivityResult event
    http://micropilot.tistory.com/1577

  3. 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.

Solution 3

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!

Share:
37,215
Erik
Author by

Erik

Programming ethusiast and motocross rider: I'm on Twitter and I'm on Facebook Developer of the app "Knowledge Organizer" for Windows Phone 8. Link: http://www.windowsphone.com/en-us/store/app/knowledge-organizer/611c36ab-db53-40e2-b1b2-043899bbe6bc pssstt (Feedback on app very much appreciated;)) Love creating stuff both hardware- and software-wise

Updated on July 09, 2022

Comments

  • Erik
    Erik almost 2 years

    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;
        }
    }
    

    }

  • Kamalpreet Grewal
    Kamalpreet Grewal over 7 years
    In MySingleton.getInstance().setMystring("hello"); that is where you are mentioning to set the string to goodbye, I think it should be MySingleton.getInstance().setMystring("goodbye");. I tried this but my string doesn't change to goodbye, it remains hello.
  • Josh
    Josh over 7 years
    @KamalpreetGrewal that "hello" value will only survive through the app's lifecycle, that means if you close the app or the Android OS kills your app, that value will disappear. Use sharedpreferences to make the string persist "permanently".