我一直在到处寻找正确的答案,但在任何地方都找不到。这就是为什么我要发布此问题,它可能看起来与其他问题非常相似,但是我尚未找到答案。我必须检索在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";
答案 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。 同样,您可以在任何“活动”或任何“片段”中使用它