Android colors in sharedpreferences - java

In my application is settings_activity where people can change some colors (icons, text etc). I want to put colors in sharedpreferences, created class:
public class AppData {
static SharedPreferences prefdata;
static SharedPreferences.Editor editordata;
static final String FCOLOR_KEY = "#FFFFFF"; //first color
static final String SCOLOR_KEY = "#FFFFFF"; //second color
static final String TCOLOR_KEY = "#FFFFFF"; //text color
static final String ICOLOR_KEY = "#FFFFFF"; //icon color
static final Image BIMG_KEY = null; //bakcground image
}
What is best value type for colors (int, string or just colors)?
How can I change values from appdata by use settings_activity and how can I use it (colors) in xml files? Should I use colors.xml(how?)?

If you are going to use the color enumeration, I would just use an int to store it. (See below for data type of ints)
http://developer.android.com/reference/android/graphics/Color.html
However, if you are going to use the hexadecimal value, then I would store it as a string. When you load your app, check the shared preferences and load the string and if the option does not exist load a default color.
object.setColor(sharedPreferences.getString("COLOR", "#FFFFFF"));.

if the user give you hex string ( as you answer to NoChinDeluxe)
you should store it in string in your sharePref and then parse it with :
public static int parseColor (String colorString)
I always do my Prefs like this:
private static final String KEY_COLOR_1 = "color 1";
private static Prefs instance;
public static Prefs with(Context ctx) {
if (instance == null) {
instance = new Prefs();
}
instance.ctx = ctx.getApplicationContext();
return instance;
}
private Context ctx;
private Prefs() {
}
public SharedPreferences getPrefs() {
return PreferenceManager.getDefaultSharedPreferences(ctx);
}
public String getColor1() {
return getPrefs().getStrings(KEY_COLOR_1, "");
}
public void setColor1(String color) {
getPrefs().edit().putStrings(KEY_COLOR_1, color).apply();
}
and then you can get your color with:
Pref.with(this).getColor1();

Related

cannot get right result from getdefaultsharedpreferences

When I use defaultsharedpreferences to save multiple data, I found data is covered. I feel confused about what happened. The expected values from preferences
userId is 2
authorizedHeader is bhlrYXZpbjpseWthdmlu
and retrieved values
userId is 2
authorizedHeader is 2
private static final String PREF_AUTHORIZED_QUERY = null;
private static final String PREF_USERID_QUERY = null;
public static String getStoredUserIdQuery(Context context){
return PreferenceManager.getDefaultSharedPreferences(context)
.getString(PREF_USERID_QUERY, null);
}
public static String getStoredAuthorizedQuery(Context context){
return PreferenceManager.getDefaultSharedPreferences(context)
.getString(PREF_AUTHORIZED_QUERY, null);
}
public static void setStoredQuery(Context context, String userId, String authorizedHeader){
PreferenceManager.getDefaultSharedPreferences(context)
.edit()
.putString(PREF_AUTHORIZED_QUERY, authorizedHeader)
.putString(PREF_USERID_QUERY, userId)
.apply();
}
you are using values as null for both keys mean there is only one key i.e. null which will override the each other (PREF_USERID_QUERY will over write previous values which were saved with null as key)
so give them values
private static final String PREF_AUTHORIZED_QUERY = "authorized";
private static final String PREF_USERID_QUERY = "userid";
You can imagine it like
PreferenceManager.getDefaultSharedPreferences(context)
.edit()
.putString("null", authorizedHeader)
.putString("null", userId) // so there is actually only one key
.apply();

Failed to get sharedPreferences value

I want to get a value from sharedPreferences. I put the sharedPreferences on Config.java
public static final String SHARED_PREF_NAME = "myauthapp";
public static final String EMAIL_SHARED_PREF = "email";
public static final String LOGGEDIN_SHARED_PREF = "loggedin";
public static final String REGISTER_URL = "http://192.168.1.6/db_android_native/register.php";
And I try to get the value of REGISTER_URL on Register.java with this
SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
String RREGISTER_URL = sharedPreferences.getString(Config.REGISTER_URL, "Not Available");
And it's always return Not Available
Why it's not give me the value of Register_URL on Config.java ?
If you need the link stored by REGISTER_URL in Config.java, you should just simply get it with
String url = Config.REGISTER_URL;
Your code
SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
String RREGISTER_URL = sharedPreferences.getString(Config.REGISTER_URL, "Not Available");
looks for a preference with name provided by Config.REGISTER_URL, but it is not a good idea storing preferences with such a long and complex name. The getSring method returns it's provided default value until you have not saved any preference with that name like this:
sharedPreferences.edit().putString(prefname, value).apply();

Android - Set variable once and use everywhere in app

Basically my question is I want to set lets say a string to A or B that is chosen by the user on the first screen. And then have this string variable be saved to be used on other actives else where in the app. I have see the posts and many like in Android global variable.
But the variable needs to be set and the gotten on each activity the variable isn't saved, once and then can be used everywhere?
How could this be done?
I hope i have explained this well enough, as my question differs from the one above.
The variable is not final it can be changed on the first activity but then I want to use it on the following activities, with out having to pass it with intent to each one.
Thanks for the help in advance.
You can use a public class with static String variable or passing the variable to another Activity with putExtra method.
Example :
public class Global {
public static final String DEVELOPER_KEY;
public static final String PLAYLIST_ID;
}
I have made one class for same purpose :
public class Constant {
public static int NUMBER_OF_TILES;
public static String setTilesId[] = {};
public static String TilesDesc[] = {};
public static String Image[] = {};
public static String TilesName;
public static int numberofbox = 0;
public static boolean isLogedIn = false;
public static String TilesSize = null;
public static boolean from_activity = true;
public static String URL_FOR_PRODUCT_ACTIVITY;
}
Now i can use this variables from anywhere in my APP.
You can put your variable in SharedPreferences. As it exactly matches you requirement.
You can put your variable in first screen and use it anywhere in your application. Also it is not final, you can change whenever you want it will just overwrite existing value of variable.
And MOST important thing is it will be preserved even after application is closed.
So whenever user starts your application next time you can use that variable.
A.java code:
package p2;
public class A{
public static String abc;
}
After declaring the static string in class A use it anywhere in the package using the class name as it is static so value will remain whatever you update it to.
B.java code :
package p1;
public class B{
public void methodTest(){
String s = A.abc;
}
}
Make your string public static
Ex:public static String myvar="hey"//This will be available across all classes
Instead of using static variable You can simply use Shared Preferences because after some time when your application is in background your static value become free automatically by garbage collector and become null
public void setString(Context context, String value) {
SharedPreferences prefs = context.getSharedPreferences("setString",
0);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("getString", value);
editor.commit();
}
public String getString(Context context) {
SharedPreferences prefs = context.getSharedPreferences("setString",
0);
String value = prefs.getString("getString", null);
return value;
}
You can also usw SharedPreferences:
SharedPreferences sets =getSharedPreferences(Choose_a_name, 0);
SharedPreferences.Editor editor=sets.edit();
editor.put string("from user", your string);
editor.commit();
And in your other activities you can retrieve, change and save them again. In that way, you can provide the customized data from the user over the activity lifecycle. Even If your task is completely killed, your data is available on the next launch.
To retrieve the data from another activity:
SharedPreferences sets = getSharedPreferences(yourPrefName,0);
String your string = sets.get string("from user", default value);
I want to give you alternative ideas comparing to intents or static classes. Hope it helps :)
class SharedPref
{
public void setString(Context context, String value) {
SharedPreferences prefs = context.getSharedPreferences("setString",
0);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("getString", value);
editor.commit();
}
public String getString(Context context) {
SharedPreferences prefs = context.getSharedPreferences("setString",
0);
String value = prefs.getString("getString", null);
return value;
}
}
and use this class like
SharePref pref=new SharedPref();
pref.setString("Hellooo");
String value=pref.getString();

Type safety in enum wrapper

Background info:
Sometimes you need to share a couple of global preferences in your android application and one option is to use the SharedPreferences to accomplish this;
//get the preferences
SharedPreferences prefs = myActivity().getSharedPreferences(“ConfigurationStore”, Context.MODE_PRIVATE);
//store a value
prefs.edit().putString(“user”, “Teddy”).commit();
//get the value
prefs.getString(“user”, null);
I like my code simple so I wrote a wrapper to hide the above, here is the result.
public enum ConfigurationStore {
USER(“user”);
private String key;
private SharedPreferences prefs = //get this from your activity class
ConfigurationStore(String key){
this.key = key;
}
public String get(){
return prefs.getString(key, null);
}
public void set(String value){
prefs.edit().putString(key, value).commit();
}
}
The usage of the wrapper is shown below
//Set a value:
ConfigurationStore.USER.set("Teddy");
//get a value
ConfigurationStore.USER.get()
It's easy to extend with new properties just by adding to the enum:
public enum ConfigurationStore {
USER(“user”),
DEPLOYMENT_TYPE(“deployment_type”);
....
//Set a value:
ConfigurationStore.DEPLOYMENT_TYPE.set("Beta-test");
//get a value
ConfigurationStore.DEPLOYMENT_TYPE.get()
The question:
The enum is strictly handing String properties.
Is there a way I can make this enum handle different types safely without adding other method signatures (getStringValue, getIntValue)?
I want to be able to do something like:
int age = 23;
String name = "Teddy"
ConfigurattionStore.AGE.set(age)
ConfigurattionStore.NAME.set(name)
...
age = ConfigurattionStore.AGE.get();
name = ConfigurattionStore.NAME.get();
No, not with this design.
To be able to do what you want, you would need to define a generic interface or class
public PrefHandler<T> {
T get();
void set(T);
}
And have multiple instances of this interface:
public class ConfigurationStore {
public static final PrefHandler<String> FOO = ...;
public static final PrefHandler<Integer> BAR = ...;
}

How can I retrieve Value of SharedPreference file in another Activity?

Activity 1st..
Here this is my first activity to add data
preferences=PreferenceManager.getDefaultSharedPreferences(context);
preferences = getPreferences(MODE_PRIVATE);
editor = preferences.edit();
editor.putString("userid",et_username.getText().toString());//adduserid
editor.putString("password",et_password.getText().toString());//add password
editor.commit();
Activity 2nd
This is my second activity to retrieve data.
String userName=preferences.getString("userid","");
String password=preferences.getString("password","");
Log.d("user : second", ""+preferences.getString("userid",""));
Log.d("password : second", ""+preferences.getString("password",""));
Here Log is not displayed because of null value.
Check your preferences object (probably is null). That might be the problem, as the other String variables are never null, the can be empty string ("").
Are you missing the initialization of preferences in the second Activity just in this example?
String userName=preferences.getString("userid");
String password=preferences.getString("password");
Log.d("user : second", ""+userName);
Log.d("password : second", ""+password);
Could you please try this way.
In both activities just use this to get the SharedPreferences object:
SharedPreferences prefs = getSharedPreferences("PREFS", Context.MODE_PRIVATE);
It may be that you attempt to access different preferences files from different Activities.
Or just use
PreferenceManager.getDefaultSharedPreferences(this);
i just store the one integer value you must more then one value in it..
PreferenceConnector.writeInteger(home.this, PreferenceConnector.com_id, homeComp_id);
below the preferenceConnector class to be use in it...
public class PreferenceConnector {
public static final String PREF_NAME = "Shared Preference";
public static final int MODE = Context.MODE_PRIVATE;
public static final String com_id = "com_id";
public static void writeBoolean(Context context, String key, boolean value) {
getEditor(context).putBoolean(key, value).commit();
}
public static boolean readBoolean(Context context, String key, boolean defValue) {
return getPreferences(context).getBoolean(key, defValue);
}
public static void writeInteger(Context context, String key, int value) {
getEditor(context).putInt(key, value).commit();
}
public static int readInteger(Context context, String key, int defValue) {
return getPreferences(context).getInt(key, defValue);
}
public static SharedPreferences getPreferences(Context context) {
return context.getSharedPreferences(PREF_NAME, MODE);
}
public static Editor getEditor(Context context) {
return getPreferences(context).edit();
}
}
and then u also use the share preference value to other activity like below...
int Pref = PreferenceConnector.readInteger(mainpage.this, PreferenceConnector.com_id, 0);
hope above code to be useful...

Categories