How to make read only (programmatically filled) Preferences? - android

How to make Preferences items with programmatically filled values (like: Version, Model number...)?

Why not use android.preference.Preference directly?
<Preference
android:key="version"
android:title="#string/version" />
No edit dialog, no more attribute, and information only!!
//Set the version string in your code
findPreference("version").setSummary(version);

I accomplished this with the following:
In my application_preferences.xml I have the following preference. This makes it so it is still black (not gray), but still cannot be edited by the user. Making it gray makes it difficult to read.
<EditTextPreference
android:key="version"
android:title="#string/version"
android:enabled="false"
android:selectable="false"
android:persistent="false"
android:shouldDisableView="false"/>
In the preference activity onCreate method, get the version preference and set the title to the application version.
EditTextPreference versionPref = (EditTextPreference)findPreference("version");
String version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
versionPref.setTitle(getString(R.string.version) + ": " + version);

You can set the preferences within you code, and check if it already is filled before you fill it. As long as you do not give users access to change this information, all they can do is "clear local data", which will cause the program to re-fill the data if you do it right.
I use this technique to store unique IDs for the device, who is logged in, etc. The user doesn't even (and should never) know what I keep track of, all they know is they have a smooth program that does what they need it to do.
Example:
SharedPreferences settings = context.getSharedPreferences("preferanceName", 0);
SharedPreferences.Editor editor = settings.edit();
int value = foo;
editor.putInt("ValueToStore", value);
editor.commit();

Kevin Westwood it is perfect thanks!!
In my case I just change the setTitle to setSummary, so the value is visible bellow the title.
String serverUrl = "http://...";
EditTextPreference pref = (EditTextPreference)findPreference("serverPrefKey");
pref.setSummary(serverUrl);

Related

What is the name of SharedPreferences file name?

I am new to Android and I am kind of stuck for 6 hours straight.
The problem is I don't know the name of the preferences file, and I need to get values from preferences file. I am using Android Studio and created a "Settings Activity". All the way I had not given name to any file except SettingsActivity.java.
So my question is what is the name of the Shared Preferences file (cause the application is keeping the values). Or otherwise if there is a way to find out.
Or perhaps I am missing something obvious in code. Following is my relevant code.
String key = "example_text";
final String PREF_FILE_NAME = "SettingsActivity";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
String value = preferences.getString(key, " null");
EDIT 1: I have an activity named RemoteDevice.java, within this activity I have a Async Task subclass for internet usage. Now I have stored IP address through the above mentioned PreferencesActivity and now want to retrieve it. But am unable to find it.
EDIT 2: In the following code I am trying to get value from edit text.
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<!-- NOTE: EditTextPreference accepts EditText attributes. -->
<!-- NOTE: EditTextPreference's summary should be set to its value by the activity code. -->
<EditTextPreference
android:key="example_text"
android:title="#string/pref_host_ip_address"
android:defaultValue="#string/pref_default_host_address"
android:selectAllOnFocus="true"
android:inputType="numberDecimal"
android:digits="123456789."
android:capitalize="words"
android:singleLine="true"
android:maxLines="1" />
<!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog to
dismiss it. -->
<!-- NOTE: ListPreference's summary should be set to its value by the activity code. -->
<ListPreference
android:key="example_list"
android:title="#string/pref_title_add_friends_to_messages"
android:defaultValue="-1"
android:entries="#array/pref_example_list_titles"
android:entryValues="#array/pref_example_list_values"
android:negativeButtonText="#null"
android:positiveButtonText="#null" />
And I am guessing here android:key is the key to be passed as arguments in
String value = preferences.getString(key, " null");
I am using Android Studio and created a "Settings Activity".
Then you get your SharedPreferences via PreferenceManager.getDefaultSharedPreferences(). Replace:
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
with:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
You can use this:
String key = "example_text";
final String PREF_FILE_NAME = "SettingsActivity";
shared = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
String value = preferences.getString(key, " null");
But first you have to save some value with your key like:
shared.edit().putString(key,"MY_VALUE").commit();
Run your project on a real device and if a SharedPreferences file (it has .xml extension) is created you can find it in the root catalog of the device, here to be more exact:
/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml
or
/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml
By the way, you may just use getPreferences() method. Change your
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
into
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
Your SharedPreferences file will get a default name. But keep in mind that it is worth using getPreferences() instead of getSharedPreferences() only if you won't need more than one SharedPreferences file in your project.

How to get preferences values Android

I have a preferences screen in Android with multiple , like PreferenceCategory and EditTextPreference. But how do I access these fields? I searched on Google and came across findPreference, which is deprecated I guess. So how can I find these fields in my MainActivity.class so I can use their values or make onclick events for them.
Thanks in advance.
You can use the code below as an example
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(context);
String strUserName = SP.getString("username", "NA");
boolean bAppUpdates = SP.getBoolean("applicationUpdates",false);
String downloadType = SP.getString("downloadType","1");
Note that the first parameter is the key and the second parameter is the default value to return in case the value is not present.
use shared preferences instead
http://developer.android.com/reference/android/content/SharedPreferences.html

Android: Is it possible to take user input and display it back?

I'm new to this but I'm trying to take user input (i.e. userName) and then display it in a different activity via a textView (i.e. display will show "it's 'userName's move").
I'm not sure if I can do this by assigning the user input to a string in the java file, then passing the data with my intent or if I have to use some form of storage.
either way, I'm still confused as to how I can get this back to a string in the .xml file to be displayed.
Any help would be much appreciated :)
cheers
As it was pointed in the comments, you should understand the what an Intent is. You can read about them here. As a very brief example:
Intent launchNewActivity = new Intent(this, NewActivity.class);
launchNewActivity.putExtra("Some key", "Some value"); //sometimes you want to pass extra data
startActivity(launchNewActivity);
Also, it would be good too to understand the use of strings.xml, as explained here. Basically, it is used to define constants that will not be hard-coded and you can call in your code. They help you to keep your code organized and also helps to translate your applications to other languages with ease. Again, a simple example is shown below:
<resources>
<string name="OK">OK</string>
<string name="cancel">Cancel</string>
<!-- Validation error messages for EditText -->
<string name="editText_validation_error_empty_field">The field cannot be empty.</string>
<string name="editText_validation_error_numbers_only">Only numbers are allowed on this field.</string>
</resources>
I think the best way is to use the SHARED PREFERENCES. its exactly for things like that.
thats how you do it:
SharedPreferences prefs = getSharedPreferences("prefs", 0);
SharedPreferences.Editor editor prefs.edit();
now, every time you want to change the string you do:
editor.putString("user_name", "jon").commit();
the "user_name" is the name of the string, and the "jon" is the content. so you can save first and last name like this:
editor.putString("user_name", "jon")
editor.putString("last_name", "dow").commit();
dont foget to put the "commit()" at the end.
and every time you want to get the string you can use:
String Name = prefs.getString("user_name", "");
String LastName = prefs.getString("last_name", "");
the good thing about this is that it is saved. so, the next time the user open the app you can still get the strings without making the user put it again by using this again:
String Name = prefs.getString("user_name", "");
String LastName = prefs.getString("last_name", "");
its that simple. hope you got it.

How to display the value of a SharedPreference without entering the dialog

I have some Shared Preferences in my application defined in an XML file. They are EditTextPreferences. I want to display the existing values on the Preference screen so that the user doesn't have to enter the Preference Edit Dialog to see the current value of the Preference. The defaultValue is only visible in the Dialog screen. I want to see the defaultValue in the main preferences screen - maybe in the place of android:summary. How can I do this?
<EditTextPreference
android:key="PREF_LT_500"
android:title="Step 1"
android:summary="I dont want a summary - I want to show current value"
android:inputType="numberDecimal"
android:defaultValue="0.8952"
android:dialogTitle="Enter Blah " />
Thanks in advance
You could try:
yourPrefrence.getText();
Or a more generic solution:
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(this);
String ans = p.getString(keyStr, defaultValue);
When this is a Context, keyStr is the key & defaultValue is a default value in case the key is not found (usually "")

read from android SharedPreference

I know it's been asked before, but it doesn't seem to work for me.
I have an XML file preferences.xml in the folder res\xml. It contains an optionscreen like so:
<PreferenceScreen>
<EditTextPreference
android:name="prfEmail"
android:summary="Your account's e-mail address"
android:title="E-mail"
android:key="prfEmail" />
</PreferenceScreen>
I can make an activity from it and it shows fine. Now I'd like to read values from these preferences, but I can't seem to find it. In another activity I do:
SharedPreferences appSharedPrefs;
appSharedPrefs = getSharedPreferences("preferences",Activity.MODE_PRIVATE);
String restoredText = appSharedPrefs.getString("prfEmail",null);
Whan I'd like to print this value it gives null back. What am I doing wrong?
The app preferences are stored in the default SharedPreferences. You can access them with :
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

Categories

Resources