简体   繁体   English

Android Studio从所有活动中获取字符串

[英]Android Studio Get String From All Activities

I'm generating a random string in MainActivity. 我在MainActivity中生成了一个随机字符串。 When i'm using intent method, I can calling and put this string in SecondActivity. 当我使用intent方法时,我可以调用并将此字符串放在SecondActivity中。 But i can't call this string from all activities. 但是我不能从所有活动中调用此字符串。 How can i do this 我怎样才能做到这一点

protected String getSaltString() {
        String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder salt = new StringBuilder();
        Random rnd = new Random();
        while (salt.length() < 18) { // length of the random string.
            int index = (int) (rnd.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.charAt(index));
        }
        String saltStr = salt.toString();
        return saltStr;

    }

Several options are available to you - in this case, because it wont introduce any extra dependencies (RxJava, EventBus, etc.), I'd recommend you write it to SharedPreferences , and have your other activities register a listener on SharedPreferences for changes to your value: 您可以使用几个选项-在这种情况下,因为它不会引入任何额外的依赖关系(RxJava,EventBus等),因此建议您将其写入SharedPreferences ,并让其他活动在SharedPreferences上注册一个侦听器以更改您的价值:

public class SaltStringPreference {

    private static final String KEY = "a_key";

    private final SharedPreferences prefs;
    private Listener listener;

    private SaltStringPreference(SharedPreferences prefs) {
        this.prefs = prefs;
    }

    public static SaltStringPreference from(Context context) {
        return new SaltStringPreference(PreferenceManager.getDefaultSharedPreferences(context));
    }

    public void set(String saltString) {
        prefs.edit().putString(KEY, saltString).apply();
    }

    public String get() {
        return prefs.getString(KEY, "<no_value>");
    }

    /* 
    Note we need to keep a reference to the listener somewhere,
    otherwise it could be garbage collected, see
    https://stackoverflow.com/a/3104265/1219389
    */  
    public void setListener(Listener listener) {
        this.listener = listener;
        prefs.registerOnSharedPreferenceChangeListener(listener);
    }

    public void removeListener() {
        prefs.unregisterOnSharedPreferenceChangeListener(listener);
        this.listener = null;
    }  

    public static abstract class Listener implements SharedPreferences.OnSharedPreferenceChangeListener {
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            if(KEY.equals(key)) {
                onSaltStringChanged(sharedPreferences.getString(KEY, "<no_value>"));
            }
        }

        /**
        * Called when the 'salt string' value changes in SharedPreferences
        * @param saltString The new 'salt string' value
        */
        protected abstract void onSaltStringChanged(String saltString);
    }   
}
class ActivityOne extends AppCompatActivity {
    //...
    SaltStringPreference.from(this).set(generatedSaltString);
}
class AnotherActivity extends AppCompatActivity {
    private final SaltStringPreference.Listener listener = new SaltStringPreference.Listener() {
        @Override
        protected void onSaltStringChanged(String saltString) {
            //Do something with new String...
        }
    }); 
    private SaltStringPreference pref;

    //onCreate...
    pref = SaltStringPreference.create(this);
    pref.setListener(listener);

    //onDestroy...
    pref.removeListener();
}

Use static Method, You can call the method to all activities. 使用静态方法,您可以对所有活动调用该方法。

public Class UtilClass{
  public static String getSaltString() {
     String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
     StringBuilder salt = new StringBuilder();
     Random rnd = new Random();
     while (salt.length() < 18) { // length of the random string.
        int index = (int) (rnd.nextFloat() * SALTCHARS.length());
        salt.append(SALTCHARS.charAt(index));
     }
     String saltStr = salt.toString();
     return saltStr;
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM