Как получить значение из общего предпочтения во фрагменте? - PullRequest
0 голосов
/ 25 января 2019

Я всюду искал правильный ответ, но нигде не мог его найти.Вот почему я публикую этот вопрос, он может выглядеть очень похоже на другие вопросы, но я пока не нашел ответа на этот вопрос.Мне нужно получить пользовательские данные, которые были сохранены во время входа в систему на устройстве Android, и я хочу использовать одни и те же данные во фрагменте, я попытался использовать несколько ответов, найденных в StackOverflow, но ни один из них не помог мне.Посмотрите на код ниже, как я могу получить пользовательские значения в строки?

 SharedPreferences preferences = getActivity().getSharedPreferences("mysharedpref",Context.MODE_PRIVATE);
    String user_name = preferences.getString("user_id",null);
    String password = preferences.getString("role", null);

Я должен передать эти строковые значения в URL, но это не работает.Я также проверил передачу значений вручную, это работает.Например, если я возьму присваивать значения вышеуказанным строкам, например

String user_name="admin";
String password="administrator";

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Полагаю, вы пытаетесь получить значения с другим ключом. Получить значения с тем же ключом, которым вы их надели.

String user_name = preferences.getString(preferences.KEY_USERNAME,null);
String password = preferences.getString(preferences.KEY_PASSWORD, null);

---- НО ----

И не используйте шаблон singleton для SharedPreferences, очень плохо использовать Context в singleton. Это приведет к краху вашего приложения. Вы можете понять, почему.

Вместо этого используйте статические методы.

public class PreferenceUtil {

public static final String PASSWORD = "PASSWORD";


public static void setInt(Context context, int in, String key) {
    SharedPreferences settings;
    Editor editor;

    settings = context.getSharedPreferences(PREFS_NAME,
            Context.MODE_PRIVATE);
    editor = settings.edit();

    editor.putInt(key, in);

    editor.apply();

}


public static int getInt(Context context, String key) {
    SharedPreferences settings;
    settings = context.getSharedPreferences(PREFS_NAME,
            Context.MODE_PRIVATE);

    if (settings.contains(key)) {
        return settings.getInt(key, 0);
    } else
        return 0;
}

}

И получить к нему доступ вот так

int password = PreferenceUtil.getInt(getActivity(), PreferenceUtil.PASSWORD);
0 голосов
/ 25 января 2019

Сначала создайте класс SharedPreference.java.

 public class SharedPreference {
    Context context;
    SharedPreferences sharedPreferences;
    String user_name;
    String password;

    public SharedPreference(Context co) {
        context = co;
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    }

    public String getPassword() {
        password = getStringInput("password");
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
        stringInput("password", password);
    }

    public String getUser_name() {
        user_name = getStringInput("Username");
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
        stringInput("Username", user_name);
    }

    public void stringInput(String key, String value) {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
    }

    public String getStringInput(String key) {
        return sharedPreferences.getString(key, "0");
    }
}

Теперь перейдите к занятию или фрагменту. пример: я ушел использовать его в MainActivity.java

public class MainActivity extends AppCompatActivity {
Prefrences prefrences;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Dashboard");

    prefrences = new Prefrences(MainActivity.this);
    prefrences.setUser_name("Rishabh Jain");
    prefrences.setUser_name("8369554235");

    Log.e("Details",prefrences.getUser_name()+" "+prefrences.getPassword())
     }
    }

Выход будет Rishabh Jain 8369554235. Точно так же вы можете использовать это в любой Деятельности или любом Фрагменте

0 голосов
/ 25 января 2019

Лучший способ использовать вашу SharedPrefernce - , используя ваш appContext, который доступен для всего приложения (Common SharedPrefernce и доступен везде) .

Определите свой экземпляр SharedPrefernce в своемКласс приложения с методами get и set , как показано ниже: (Если вы не создали класс Application, создайте его, как показано ниже, Этот класс вызывается в начале вашего приложения)

public class Application extends android.app.Application {   
    private static Application _instance;   
    private static SharedPreferences _preferences;

    @Override
    public void onCreate() {
        super.onCreate();
         _instance = this;
    }

    public static Application get() {
        return _instance;
    }

    /**
     * Gets shared preferences.
     *
     * @return the shared preferences
     */
    public static SharedPreferences getSharedPreferences() {
        if (_preferences == null)
            _preferences = PreferenceManager.getDefaultSharedPreferences(_instance);
        return _preferences;
    }


//set methods
    public static void setPreferences(String key, String value) {
        getSharedPreferences().edit().putString(key, value).commit();
    }

    public static void setPreferences(String key, long value) {
        getSharedPreferences().edit().putLong(key, value).commit();
    }

    public static void setPreferences(String key, int value) {
        getSharedPreferences().edit().putInt(key, value).commit();
    }

    public static void setPreferencesBoolean(String key, boolean value) {
        getSharedPreferences().edit().putBoolean(key, value).commit();
    }

    //get methods
    public static String getPrefranceData(String key) {
        return getSharedPreferences().getString(key, "");
    }

    public static int getPrefranceDataInt(String key) {
        return getSharedPreferences().getInt(key, 0);
    }

    public static boolean getPrefranceDataBoolean(String key) {
        return getSharedPreferences().getBoolean(key, false);
    }

    public static long getPrefranceDataLong(String interval) {
        return getSharedPreferences().getLong(interval, 0);
    }
}

Объявите класс Application в файле AndroidManifest.xml со строкой android: name = ". Application" , как показано в следующем фрагменте:

<application
            android:name=".Application"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:largeHeap="true"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">

Теперь, как сохранить ключ-значение:

Application.setPreferences("Key","String_Value");

Как получить значение ключа:

String value_string=Application.getPrefranceData("Key");

Теперь вы можете set-SharedPrefernce значение ключа и get-SharedPrefernceзначение из любой точки приложения с использованием общедоступного класса приложения и статических методов get и set

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...