如何从Fragment的共享首选项中获取价值?

时间:2019-01-25 06:52:23

标签: android sharedpreferences

我一直在到处寻找正确的答案,但在任何地方都找不到。这就是为什么我要发布此问题,它可能看起来与其他问题非常相似,但是我尚未找到答案。我必须检索在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 :(得分:0)

使用SharedPrefernce的最佳方法是使用整个应用可访问的appContext(Common SharedPrefernce,并且可在任何地方访问)

使用获取和设置方法,在Application类中定义您的SharedPrefernce实例,如下所示:(如果尚未创建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);
    }
}

android:name =“。Application” 行在AndroidManifest.xml文件中声明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");

您现在可以使用 public Application class (公共应用程序类)和在应用程序中的任何位置设置SharedPrefernce键值 get-SharedPrefernce值 strong>静态获取和设置方法

答案 1 :(得分:0)

我想您正在尝试使用其他键来获取值。使用与输入相同的键来获取值。

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

---- BUT ----

不要对SharedPreferences使用单例模式,在单例中使用Context是非常糟糕的。它将使您的应用程序崩溃。您可以找出原因。

请使用静态方法。

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

答案 2 :(得分:0)

首先创建一个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。 同样,您可以在任何“活动”或任何“片段”中使用它