Android Studio получает строки из всех мероприятий - PullRequest
1 голос
/ 07 июля 2019

Я генерирую случайную строку в MainActivity.Когда я использую метод намерения, я могу вызвать и поместить эту строку в SecondActivity.Но я не могу назвать эту строку из всех видов деятельности.Как я могу это сделать

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;

    }

Ответы [ 2 ]

2 голосов
/ 07 июля 2019

Вам доступно несколько опций - в этом случае, поскольку он не вводит никаких дополнительных зависимостей (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();
}
0 голосов
/ 07 июля 2019

Использовать статический метод. Вы можете вызывать метод для всех действий.

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;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...