java - 共享首选项无法正确保存

标签 java android

嗨,当我保存信息时,我在“姓氏”中写的内容会复制到“名字字段”,无论我在名字中写什么,并且总是“舞者单选按钮”保存。 我认为问题是我的 Activity 我不知道我写了什么=/

这是 Activity :

public class user_profile extends AppCompatActivity {

    private user_sample userSample = new user_sample();
    user_sharedpref_manager user_sharedpref_manager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_profile);

        user_sharedpref_manager = new user_sharedpref_manager(this);

        userSample = user_sharedpref_manager.get_user();

        EditText profile_firstname = findViewById(R.id.profile_firstname);
        EditText profile_lastname = findViewById(R.id.profile_lastname);
        RadioButton profile_gamer_button = findViewById(R.id.profile_gamer_radio_button);
        RadioButton profile_dancer_button = findViewById(R.id.profile_dancer_radio_button);
        RadioButton profile_soccer_player_button = findViewById(R.id.profile_soccer_player_radio_button);
        Button profile_save_button = findViewById(R.id.profile_save_button);

        profile_firstname.setText(userSample.getFirstname());
        profile_lastname.setText(userSample.getLastname());


        profile_firstname.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                userSample.setFirstname(charSequence.toString());
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });


        profile_lastname.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                userSample.setLastname(charSequence.toString());
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });


        int career = userSample.getCareer();

        if (career == user_sample.gamer) {
            profile_gamer_button.setChecked(true);

        } else if (career == user_sample.dancer) {
            profile_dancer_button.setChecked(true);

        } else if (career == user_sample.soccer_player) {
            profile_soccer_player_button.setChecked(true);
        }

        profile_gamer_button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                userSample.setCareer(user_sample.gamer);
            }


        });

        profile_dancer_button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                userSample.setCareer(user_sample.dancer);
            }
        });

        profile_soccer_player_button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                userSample.setCareer(user_sample.soccer_player);
            }
        });

        profile_save_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                user_sharedpref_manager.save_user(userSample);
                Toast.makeText(user_profile.this, "clicked", Toast.LENGTH_LONG).show();
            }
        });
    }


}

共享偏好类别:

public class user_sharedpref_manager {

    private static final String PROFILE_SHARED_PREF = "profile_Shared_pref";

    private static final String PROFILE_FIRST_NAME = "profile_first_name";
    private static final String PROFILE_LAST_NAME = "profile_first_name";
    private static final String CAREER = "career";

    private SharedPreferences sharedPreferences;

    public user_sharedpref_manager(Context context) {
        sharedPreferences = context.getSharedPreferences(PROFILE_SHARED_PREF, Context.MODE_PRIVATE);
    }

    public void save_user(user_sample userSample) {
        if (userSample != null) {
            SharedPreferences.Editor editor = sharedPreferences.edit();

            editor.putString(PROFILE_FIRST_NAME, userSample.getFirstname());
            editor.putString(PROFILE_LAST_NAME, userSample.getLastname());
            editor.putInt(CAREER, userSample.getCareer());
            editor.apply();
        }

    }


    public user_sample get_user() {
        user_sample userSample = new user_sample();
        userSample.setFirstname(sharedPreferences.getString(PROFILE_FIRST_NAME, ""));
        userSample.setLastname(sharedPreferences.getString(PROFILE_LAST_NAME, ""));
        userSample.setCareer(sharedPreferences.getInt(CAREER, user_sample.gamer));
        return userSample;
    }
}

及其保存的共享首选项:

<map>
<int name="career" value="1" />
<string name="profile_first_name">gftfgtdrrdrt</string>

用户示例:

public class user_sample {

private String firstname ="";
private String lastname="";
public static final int gamer=0;
public static final int dancer=1;
public static final int soccer_player=2;
private  int career=gamer;

public String getFirstname() {
    return firstname;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

public int getCareer() {
    return career;
}

public void setCareer(int career) {
    this.career = career;
}

最佳答案

private static final String PROFILE_FIRST_NAME = "profile_first_name";
private static final String PROFILE_LAST_NAME = "profile_first_name";

您的两个 key 的值都是“profile_first_name”。我猜测 PROFILE_LAST_NAME 应该等于 "profile_last_name"

关于java - 共享首选项无法正确保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52992438/

相关文章:

java - 如何强制在 @Entity 和 @ElementCollection 之间生成外键?

android - Material Design EditText 添加了错误的填充

java - Android Eclipse 错误

android - abc_* 字符串的本地化(来自 com.android.support :appcompat-v7) appeared in my APK

java - onItemClick 单击时不起作用

android - 模拟器中闪烁红色边框的含义

java - 正则表达式适用于在线检查器,但不适用于 Java

java - 重新部署后使用 JSF 2 防止 ViewExpiredException

java - 公开 Tomcat 日志文件

java3d 检测特定对象而不是所有碰撞