Android:使用多个editTexts保存首选项

时间:2017-06-05 20:40:41

标签: java android sharedpreferences preferences

我正在尝试保存用户放在3 editText fiels(editText1,editText2,editText3)中的值,以便在应用重启后它们显示在右侧字段中。 问题:只有editText3的最后一个值被保存在重启后的3个字段中。 什么是解决方法,以便保存和重新加载特定字段的值?

2 个答案:

答案 0 :(得分:0)

解决了!

public class MainActivity extends AppCompatActivity {
int sum = 0;
int ects = 0;
float mark = 0;
NumberFormat numberFormat = new DecimalFormat("0.00");
Button button1;
TextView textView1;
EditText editText1;
EditText editText2;
EditText editText3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button1 = (Button)findViewById(R.id.button1);
    textView1 = (TextView)findViewById(R.id.textView1);
    editText1 = (EditText)findViewById(R.id.editTextGDI);
    editText2 = (EditText)findViewById(R.id.editTextGDW);
    editText3 = (EditText)findViewById(R.id.editTextProgrammieren1);
    loadSavedPreferences();

    button1.setOnClickListener(
            new Button.OnClickListener() {
                public void onClick(View v){

                    ViewGroup group = (ViewGroup)findViewById(R.id.activity_main);
                    for (int i = 0, count = group.getChildCount(); i < count; ++i) {
                        View view = group.getChildAt(i);
                        if (view instanceof EditText) {
                            if(view.equals(editText1) && !(editText1.getText().toString().matches(""))){ //GDI
                                System.out.println("edittext1");
                                ects += 5;
                                try{ sum += Integer.parseInt(editText1.getText().toString()) *5; } catch(NumberFormatException n){}
                            }
                            else if(view.equals(editText2)&& !(editText2.getText().toString().matches(""))){ //GDW
                                System.out.println("edittext2");
                                ects += 5;
                                try{ sum += Integer.parseInt(editText2.getText().toString()) *5; } catch(NumberFormatException n){}
                            }
                            else if(view.equals(editText3)&& !(editText3.getText().toString().matches(""))){
                                System.out.println("edittext3");
                                ects += 7;
                                try{ sum += Integer.parseInt(editText3.getText().toString()) *7; } catch(NumberFormatException n){}
                            }
                        }
                    }

                    mark = (float)sum / (float)ects;
                    textView1.setText(String.valueOf(numberFormat.format(mark)));
                    savePreferences("1", editText1.getText().toString());
                    savePreferences("2", editText2.getText().toString());
                    savePreferences("3", editText3.getText().toString());

                    sum = 0;
                    ects = 0;
                    mark = 0;
                }
            }
    );
}

private void loadSavedPreferences() {
    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    editText1.setText(sharedPreferences.getString("1", "YourName"));
    editText2.setText(sharedPreferences.getString("2", "YourName"));
    editText3.setText(sharedPreferences.getString("3", "YourName"));
}

private void savePreferences(String key, String value) {
    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
}
}

答案 1 :(得分:0)

您需要为每个保存的文本使用不同的密钥:

savePreferences("storedName", editText1.getText().toString());
savePreferences("storedName2", editText2.getText().toString());
savePreferences("storedName3", editText3.getText().toString());

然后,检索每个文本

private void loadSavedPreferences() {
    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    editText1.setText(sharedPreferences.getString("storedName", "YourName"));
    editText2.setText(sharedPreferences.getString("storedName2", "YourName"));
    editText3.setText(sharedPreferences.getString("storedName3", "YourName"));
}

请注意,因为如果您没有使用指定的键参数保存任何文本,则getString中的第二个参数(“YourName”)是默认值。