How save changed TextView with SharedPreferences? - android

OK here is my problem. I have a spinner and every option in spinner should edit textview in my layout (option in spinner you can see in position command), so I have made it with SharedPreferences, it is not problem, when I select some option in spinner, so the textview is changed, but when I kill my app and then re-open, the textview is default (the same as defined in my layout). So where is the problem?
First Activity:
if(position == 4){
SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();
prefsEditorUv.putString(maxUv, "1");
prefsEditorUv.commit();
}
if(position == 5){
SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();
prefsEditorUv.putString(maxUv, "2");
prefsEditorUv.commit();
}
if(position == 6){
SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();
prefsEditorUv.putString(maxUv, "3");
prefsEditorUv.commit();
}
if(position == 7){
SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();
prefsEditorUv.putString(maxUv, "4");
prefsEditorUv.commit();
}
Second Activity:
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
SharedPreferences myPrefsUv = UVActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
String prefNameUv = myPrefsUv.getString(maxUv, "");
if(prefNameUv == "1"){
final TextView textUv = (TextView)findViewById(R.id.text_max);
textUv.setText("100");
}
if(prefNameUv == "2"){
final TextView textUv = (TextView)findViewById(R.id.text_max);
textUv.setText("110");
}
if(prefNameUv == "3"){
final TextView textUv = (TextView)findViewById(R.id.text_max);
textUv.setText("120");
}
if(prefNameUv == "4"){
final TextView textUv = (TextView)findViewById(R.id.text_max);
textUv.setText("130");
}
}
Thank you.

You are adding the different values with the same key? This way I think it will always return the first match. I don't see in your code "maxUv" to be assigned different values, according to the different cases.
1) I suggest you move to if/else construct. This way, when you're in the right case, the remaining conditions are not evaluated.
2) call the following lines outside the if/else construct. You don't need to get the SharedPreferences Editor in every case.
SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();
Same for the acquiring of TextView textUv in the second Activity. Just acquire reference once, and use the same reference in all cases.
3) In the second Activity, you're also comparing Strings with == operator, but Strings should be compared with equals().

The other guy beat me to it. the old equals stuff.
You're comparing a String using "==". You should compare using .equals:
if(prefNameUv.equals("1"))
This is what you need.
Besides, try not to declare the preferences file. In your case, you're not needing it, so there is no need to make it more complex. Use the following...
First activity:
SharedPreferences myPrefsUv = PreferenceManager.getDefaultSharedPreferences(CPUActivity.this);
Second activity:
SharedPreferences myPrefsUv = PreferenceManager.getDefaultSharedPreferences(UVActivity.this);

Related

EditText hint as shared pref default?

Is it possible to set the EditText "hint" or default text to the value of a sharedpref string? I have 3 EditText, one button, when the button is clicked, the 3 values are saved in SharedPreferences for a later time in the app. As of right now, once the button is clicked the 3 edit texts stay to the values entered, but if you leave the activity and return, they all go back to blank. I'm wondering if there is a way to set them so they are the sharedpref value of the string, and if nothing is saved set them to the default given. Also, how do I set the default value of a sharedpref String? Thanks!
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);
SharedPreferences.Editor editor = pref.edit();
if (mEditTextBench.getText().length() > 0 && mEditTextDead.getText().length() > 0 && mEditTextSquat.getText().length() > 0) {
editor.putString("maxDead", mEditTextDead.getText().toString());
editor.putString("maxSquat", mEditTextSquat.getText().toString());
editor.putString("maxBench", mEditTextBench.getText().toString());
editor.apply();
This is my code in another layout to test to make sure it is properly saving.(which it is) I'm not entirely sure what the "null" is doing though. So if anyone can help with that too thanks!!
String maxDead = pref.getString("maxDead", null);
TextView textViewTest = (TextView) findViewById(R.id.textViewTest);
textViewTest.setText(maxDead);
Doh!! Figured it out! Added this to onCreate:
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);
String maxDeadHint = pref.getString("maxDead", "100");
mEditTextDead.setHint(maxDeadHint);
My bad! Thanks!
Once you make the appropriate replacements, this should work:
TextView deadText = (TextView) findViewById(R.id.//insert id//);
TextView squatText = (TextView) findViewById(R.id.//insert id//);
TextView benchText = (TextView) findViewById(R.id.//insert id//);
deadText.setHint(pref.getString("maxDead", "default_value"));
squatText.setHint(pref.getString("maxSquat", "default_value"));
benchText.setHint(pref.getString("maxBench", "default_value"));

Shared preferences doesn't store int data

I have an activity with two TextViews which show int values. These values change incrementally (1, 2, 3, and so...) when the user clicks a button. I use SharedPreferences to store that values via button click. When I close the app and open it again, the values are correctly displayed in the TextViews, but if they change, they should be added from the previous stored value. Problem is that they start to count from zero.
Here is my code:
public class Roulette1 extends ActionBarActivity {
Button button0, button1;
int click_button0, click_button1;
public static final String button0Str = "button0Key";
public static final String button1Str = "button1Key";
public static final String MyPREFERENCES = "MyPrefsRoulette1";
SharedPreferences sharedpreferences;
TextView times_0_tv;
TextView times_1_tv;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout1);
times_0_tv = (TextView) findViewById(R.id.times_0);
times_1_tv = (TextView) findViewById(R.id.times_1);
button0 = (Button) findViewById(R.id.button0);
button1 = (Button) findViewById(R.id.button1);
final TextView total_clicks_tv = (TextView) findViewById(R.id.total_clicks);
button1.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
click_button1 = click_button1 + 1;
int total_clicks = click_button0 + click_button1;
total_clicks_tv.setText(String.valueOf(total_clicks));
times_0_tv.setText(click_button0);
times_1_tv.setText(click_button1);
button0.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
click_button0 = click_button0 + 1;
int total_clicks = click_button0 + click_button1;
total_clicks_tv.setText(String.valueOf(total_clicks));
times_0_tv.setText(click_button0);
times_1_tv.setText(click_button1);
}
});
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
if (sharedpreferences.contains(button0Str))
{
times_0_tv.setText(sharedpreferences.getString(button0Str, ""));
}
if (sharedpreferences.contains(button1Str))
{
times_1_tv.setText(sharedpreferences.getString(button1Str, ""));
}
}
public void run1(View view) {
SharedPreferences.Editor editor = sharedpreferences.edit();
String times0string = times_0_tv.getText().toString();
String times1string = times_1_tv.getText().toString();
editor.putString(button0Str, times0string);
editor.putString(button1Str, times1string);
editor.commit();
}
Hope you have any idea. Thanks!
When you read from sharedPrefs, remember to update the field counters and not just the value of the textViews.
As suggested in the comments, a possible solution would be to use the textView value as the state, updating that directly. Otherwise you have to keep the counters updated manually, for example by updating the fields value at the same time you update the textView value. Personally, I prefer to keep the state separated from the presentation, so that it is easier to compute something with that value later (the downside is that you have to keep the view synchronized. This might change with the new data binding library).
PS I purposely did not put any code, because the solution is trivial and there are other answers with code, but more importantly because I think that the data binding library is a much cleaner way to deal with this kind of problems, even though it's still in beta stage.
Sharedpreferences stored int data also. Check this link:
http://androidexample.com/Android_SharedPreferences_Basics/index.php?view=article_discription&aid=126&aaid=146
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
Editor editor = pref.edit();
/**************** Storing data as KEY/VALUE pair *******************/
editor.putBoolean("key_name1", true); // Saving boolean - true/false
editor.putInt("key_name2", "int value"); // Saving integer
editor.putFloat("key_name3", "float value"); // Saving float
editor.putLong("key_name4", "long value"); // Saving long
editor.putString("key_name5", "string value"); // Saving string
// Save the changes in SharedPreferences
editor.commit(); // commit changes
I think there is some logical mistake in your code. Please check.
Add this code to the very beginning of your oncreate:
SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
times0string = String.valueOf(sharedPreferences.getString(button0Str, 0));
times1string = String.valueOf(sharedPreferences.getString(button1Str, 0));
To solve your problem, Try below code:
Replace first two line inside button1 onClick()
click_button1 = Integer.parseInt(sharedpreferences.getString(button1Str, "")) + 1;
int total_clicks = Integer.parseInt(sharedpreferences.getString(button0Str, "")) + click_button1;
Replace first two line inside button0 onClick()
click_button0 = Integer.parseInt(sharedpreferences.getString(button0Str, "")) + 1;
int total_clicks = click_button0 + Integer.parseInt(sharedpreferences.getString(button1Str, ""));

pick a color from the holocolorpicker then saved using shared preferences

am trying to save he color picked from the holocolorpicker and use it in another activity
before the onCreate method in the settings activity i put this lines
private String SettingsTAG0 = "backcolorValue";
private SharedPreferences backcolorprefs;
private static int backcolorValue = 0;
after the onCreate method in the settings activity i put this lines
public void onColorChanged(int color) {
ColorPicker picker0 = (ColorPicker) findViewById(R.id.backpicker);
backcolorValue = picker0.getColor();
Editor editor0 = backcolorprefs.edit();
editor0.clear();
editor0.putInt("back_colorcode", backcolorValue);
editor0.commit();
}
before the onCreate method of the other activity i put this lines
private String SettingsTAG0 = "backcolorValue";
private SharedPreferences backcolorprefs;
private static int backcolorValue = 0;
in the onCreate method of the other activity i put this lines
backcolorprefs = getSharedPreferences(SettingsTAG0, 0);
backcolorprefs.getInt("back_colorcode", backcolorValue);
View view = this.getWindow().getDecorView();
view.setBackgroundColor(backcolorValue);
i am a super newbie to android and java but i make a try but nothing is happened
any help please
This is how sharedpreference used:
// put int
SharedPreferences sharedpreferences = getSharedPreferences("MyPreference", Context.MODE_PRIVATE);
Editor editor = sharedpreferences.edit();
editor.putInt("back_colorcode", backcolorValue);
editor.commit();
// get int
SharedPreferences sharedpreferences = getSharedPreferences("MyPreference", Context.MODE_PRIVATE);
int backcolorValue = sharedpreferences.getInt("back_colorcode", 0)
Nothing happened because you are not assigning value read from preferences to backcolorValue. This line:
backcolorprefs.getInt("back_colorcode", backcolorValue);
simply reads it and DOESN'T store in backcolorValue. Do:
backcolorValue = backcolorprefs.getInt("back_colorcode", backcolorValue);
Also, in onColorChanged, I don't see that you're initialising backcolorprefs, so make sure you do. Btw, for getSharedPreferences, you should use constant Context.MODE_PRIVATE, instead of hardcoded value of 0.
onColorChanged method parameter is color code selected from ColorPicker. save same in SharedPreferences :
public void onColorChanged(int color) {
Editor editor0 = backcolorprefs.edit();
editor0.clear();
editor0.putInt("back_colorcode", color);
editor0.commit();
}
In second Activity get color code from preference and pass to setBackgroundColor :
int colorCode=backcolorprefs.getInt("back_colorcode", Color.BLACK);
View view = this.getWindow().getDecorView();
view.setBackgroundColor(colorCode);

Cant use SavePreferences for TextView

I have a TextView. When the Activity is first created the Value of the textView is "", as in nothing. But the user can initiate some actions that can make the text="st". That works fine, once more that works fine. The problem is when I leave the page and come back instead of text="st" , it's " " as in nothing. So the user has to waste time and get the textView back to "st" through some actions.
I tried to save the TextView using SavePreferences but since the value of TextView is nothing when the activity starts SavePreferences does exactly what it's supposed to do and makes the TextView equal nothing. Isn't there some way for me to save the value of the TextView. I have other Views on my page I do not want to save, so how do I save just the TextView as it is when the user leaves the app or activity?
TextView s1;
s1 = (TextView)findViewById(R.id.s1);
//9 miles down the page
LoadPreferences();
SavePreferences("MEM46", s1.getText().toString());
LoadPreferences();}
private void SavePreferences(String key, String value){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();}
private void LoadPreferences(){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
String strSavedMem46 = sharedPreferences.getString("MEM46", "");
s1.setText(strSavedMem46);
lay1.setOnLongClickListener(new OnLongClickListener(){
public boolean onLongClick(View v){
AlertDialog.Builder alert = new AlertDialog.Builder(xxx.this);
alert.setTitle("Help"); //Set Alert dialog title here
alert.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface d, int choice){
if(choice == 0) {
d.cancel();
}
else if(choice == 1){
TextView ss1=(TextView)findViewById(R.id.s1);
ss1.setText("st");d.cancel(); }
else if(choice == 2) {
TextView ss1=(TextView)findViewById(R.id.s1);
ss1.setText("");d.cancel();}});
alert.show();
return true;
}});
At which point exactly do you call LoadPreferences/SavePreferences?
Saving should happen only when the user leaves the activity, so onPause() must be overriden to call the savePreference(). Loading should be done in onStart().

Multiple saved preferences in android

I am very new to java and android but doing my best to make an app, basicaly I want a page with 6 text boxes on it, and each allows the user to type a 3 digit unique value into each, check a confirm box and then a button to save, then when the user revisits this part of the app the data will still be there, I managed to get it working for 1 box but if i add another it just duplicated box 1s value, here is my code for the class
public class Settings extends Activity implements OnClickListener {
CheckBox cb;
EditText et, et1;
Button b;
String test;
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
cb = (CheckBox) findViewById(R.id.checkBox1);
et = (EditText) findViewById(R.id.editText1);
b = (Button) findViewById(R.id.button1);
b.setOnClickListener(this);
loadPrefs();
cb.setChecked(false);
}
private void loadPrefs() {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
boolean cbValue = sp.getBoolean("CHECKBOX", false);
String name = sp.getString("NAME", "Kg");
if(cbValue){
cb.setChecked(true);
}else{
cb.setChecked(false);
}
et.setText(name + (" kg"));
}
private void savePrefs(String key, boolean value) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = sp.edit();
edit.putBoolean(key, value);
edit.commit();
}
private void savePrefs(String key, String value) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = sp.edit();
edit.putString(key, value);
edit.commit();
}
public void onClick(View v) {
// TODO Auto-generated method stub
savePrefs("CHECKBOX", cb.isChecked());
if (cb.isChecked())
savePrefs("NAME", et.getText().toString());
finish();
}
}
any help would be greatly appreciated as time is short :(
Read this.
What you're not coding is saving the data.
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
boolean cbValue = sp.getBoolean("CHECKBOX", false);
What the second line does is says, is "CHECKBOX" a saved sharedpreference? No, it isn't. Okay let's get the default value of false then.
What you need to do is save it using this:
SharedPreferences.editor Editor = sp.edit();
Editor.putBoolean("CHECKBOX",true);
Editor.commit();
The first line defines the sharedpreference editor. The next line saves the boolean value true under the in effect filename (key) of CHECKBOX and then the commit line says, okay do the above and finalise it so that now whenever I call:
sp.getBoolean("CHECKBOX",false);
I will get true because I won't have to use the default value of false.
Try to make this easy for you...
First, in your proferences xml, each text box and check box needs it's own key.
Secondly, to make it easy for you to read/understand you should assign a different name for the pref save method void savePrefs(String key, String value).
For example String: void savePrefsString(String key, String value)
For example boolean: void savePrefsBoolean(String key, boolean value)
Be sure each one is called appropriately (savePrefsBoolean for boolean and savePrefsString for edittext).
Then for each edit text you will want to retrieve the key from preferences for that edittext.
Example:
String name1 = sp.getString("NAME1", "Kg");
String name2 = sp.getString("NAME2", "Kg");
String name3 = sp.getString("NAME3", "Kg");
Then:
et1.setText(name1 + (" kg"));
et2.setText(name2 + (" kg"));
et3.setText(name1 + (" kg"));
Do the same for your checkboxes (they are actually true/false booleans).
Example:
boolean cb1 = sp.getBoolean("CHECKBOX1", false); //false is default value
boolean cb2 = sp.getBoolean("CHECKBOX1", false);
boolean cb3 = sp.getBoolean("CHECKBOX1", false);
Then to set value from prefs:
if(cb1){
cb1.setChecked(true);
}else{
cb1.setChecked(false);
}
and to save what the user has pressed:
savePrefsBoolean("CHECKBOX1", cb1.isChecked()); // get check value of checkbox
savePrefsBoolean("CHECKBOX2", cb2.isChecked());
savePrefsBoolean("CHECKBOX3", cb3.isChecked());

Categories

Resources