I\'m developing an application in which I\'m storing username
and password
in SharedPreferences
. All things are working fine for me, s
Change to:
SharedPreferences emailLoginSP;
SharedPreferences.Editor SPEdit;
emailLoginSP = getSharedPreferences("pref_file_name",MODE_PRIVATE);
SPEdit = emailLoginSP.edit();
SPEdit.putString("prefEmailId", email_text);
SPEdit.putString("prefUserId", userIDToken);
SPEdit.putString("prefAccess_token", accessToken);
SPEdit.commit();
NOTE: This is untested and from memory, so there may be an error.
You want to minimise the .commit()
calls, which is why there is only one at the end.
pref_file_name
can be whatever you want, with lower case letters, no numbers at start, etc.
See I have done like below.
sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
editor = sharedPreferences.edit();
isPaidVerison = sharedPreferences.getInt("isPaidVerison", 0);
editor.putInt("isPaidVerison", 1);
editor.commit();
And this works fine. Data will remain in Sharedprefrences till will do not reinstall the app or till will d'not clear data.
And I retrive data this way.
isPaidVerison = sharedPreferences.getInt("isPaidVerison", 0);
If you want to try an approach other than shared preferences then you can use a file to write the values and then retrieve the values from it. Declare a text file emailLogin.txt and use it as follows to write the data.
try {
Context context = MainActivity.this;
OutputStreamWriter out=
new OutputStreamWriter(context.openFileOutput(EMAILLOGIN, 0));
out.write(email_text);
out.write("\r\n");
out.write(userIDToken);
out.write("\r\n");
out.write(accessToken);
out.write("\r\n");
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
After writing to the file, you can do the following to read from it.
File file = this.getFileStreamPath(EMAILLOGIN);
if(file.exists())
{
try {
InputStream in=openFileInput(NUMBERS);
if (in!=null) {
InputStreamReader tmp=new InputStreamReader(in);
BufferedReader reader=new BufferedReader(tmp);
String str;
String strcount[]= new String[20];
java.util.Arrays.fill(strcount, 0, 10, "");
while ((str = reader.readLine()) != null) {
strcount[linecount]=str;
}
loginEmail = strcount[0];
loginUserId = strcount[1];
loginAccessToken = strcount[2];
in.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
This will ensure that even when your app force closes or if your device reboots, you can still read the required values from the file.
Make sure that you are using the same file to save and retrieve. This made me look really dumb :(
// When saving
public SharedPreferences.Editor getEditor(Activity activity, int mode) {
SharedPreferences sharedPref = activity.getApplicationContext().getSharedPreferences(PreferenceConstants.SWAGGER_USER_PREFS, mode);
SharedPreferences.Editor editor = sharedPref.edit();
return editor;
}
// When getting it
public SharedPreferences getSharedPref(Activity activity, int mode) {
SharedPreferences sharedPref = activity.getSharedPreferences(PreferenceConstants.SWAGGER_USER_PREFS, mode);
return sharedPref;
}
Hi ! Solution that worked for me!
Solution 1 Solution 2
Solution 1:
SharedPreferences sharedPreferences = getSharedPreferences("namefile", Context.MODE_PRIVATE);//store or retrieved file "namefile.xml". /*or SharedPreferences sharedPreferences =getActivity().getSharedPreferences("namefile", Context.MODE_PRIVATE); (use Shared Preferences in Fragment)*/ String getValueFromKey = sharedPreferences.getString("yourKey",new String()); //Log.d("printf:",getValueFromKey ); getValueFromKey ="Hahaha"; /* Edit value or Do nothing …… */ SharedPreferences.Editor editor = sharedPreferences.edit(); editor.clear(); //[important] Clearing your editor before using it. editor.putString("yourKey", getValueFromKey); editor.commit();
Solution 2:
SharedPreferences sharedPreferences = getSharedPreferences("namefile", Context.MODE_PRIVATE);//store or retrieved file "namefile.xml". /*or SharedPreferences sharedPreferences = getActivity().getSharedPreferences("namefile", Context.MODE_PRIVATE); (use Shared Preferences in Fragment) */ Set<String> getListValueFromKey = sharedPreferences.getStringSet("yourKey",new HashSet<String>()); getListValueFromKey.add("Hahaha"); getListValueFromKey.add("Kakaka"); getListValueFromKey.add("Hohoho"); /* Add value or Do nothing …… */ SharedPreferences.Editor editor = sharedPreferences.edit(); editor.clear(); //[important] Clearing your editor before using it. editor.putStringSet("yourKey", getListValueFromKey); editor.commit();
I have had exactly same problem like yours and this worked for me. For my whole code sample see
I have a login screen and wanted the app to appear as if it's remained "logged in" at the internal screen after the app is closed/destroyed/phone call/etc.
I have a Preferences
Object to save values following Login
or Register
. I read preference values in all the key screen onResume()
methods.
After login (for example):
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(activity);
SharedPreferences.Editor editor = app_preferences.edit();
editor.putString("sessionId", application.currentSessionId);
editor.putString("userId", application.currentUserId);
editor.putString("userEmail", application.currentUserEmail);
editor.putString("siteUserId", application.currentSiteUserId);
editor.commit();
Within onResume() of Activities: (ie, within internal screens)
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(activity);
application.currentSessionId = app_preferences.getString("sessionId", "");
application.currentUserId = app_preferences.getString("userId", "");
application.currentUserEmail = app_preferences.getString("userEmail", "");
application.currentSiteUserId = app_preferences.getString("siteUserId", "");
Note. I have application "global" variables, ie, application.currentSessionId
, you can just substitute your variables
Try something similar maybe your not saving or retrieving the values correctly because SharePreferences
should work