如何使用savePreferences
和loadPreferences
方法
在第一个活动
private static final String GLOBAL_PREFERENCES = "music_status";
public static void savePreferences(@NonNull Context context, String key, int value) {
SharedPreferences sharedPreferences = context.getSharedPreferences(GLOBAL_PREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key, value);
editor.apply();
}...
protected void onResume() {
super.onResume();
musicGroup = (RadioGroup) findViewById(R.id.radioGroupForMusic);
turnOn = (RadioButton) findViewById(R.id.radioButtonMusicOn);
turnOff = (RadioButton) findViewById(R.id.radioButtonMusicOff);
musicGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.radioButtonMusicOff:
mediaPlayer.pause();
savePreferences(MainMenuActivity.this,"music_status",0);
case R.id.radioButtonMusicOn:
mediaPlayer.start();
savePreferences(MainMenuActivity.this,"music_status",1);
}
}
});
}
在第二项活动
中private static final String GLOBAL_PREFERENCES = "music_status";
public static int loadPreferences(@NonNull Context context, String key, int defaultValue) {
SharedPreferences sharedPreferences = context.getSharedPreferences(GLOBAL_PREFERENCES, Context.MODE_PRIVATE);
return sharedPreferences.getInt(key, defaultValue);
}
但我不知道如何从第一项活动中获取价值
答案 0 :(得分:4)
简短的回答是你不能那样做。除非您的status
变量是静态的。这种情况非常糟糕。
你有三个选择。
与我之前的修订版相反。这可能是您案例的最佳选择。
如果您只想保存某些内容的状态,您可能会发现最好不要使用类来保存音乐的状态。你可以这样做,@ cricket_007建议并实施SharedPreferences
。
您可以使用以下示例函数:
private static final String GLOBAL_PREFERENCES = "a.nice.identifier.for.your.preferences.goes.here";
public static void savePreferences(@NonNull Context context, String key, int value) {
SharedPreferences sharedPreferences = context.getSharedPreferences(GLOBAL_PREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key, value);
editor.apply();
}
public static int loadPreferences(@NonNull Context context, String key, int defaultValue) {
SharedPreferences sharedPreferences = context.getSharedPreferences(GLOBAL_PREFERENCES, Context.MODE_PRIVATE);
return sharedPreferences.getInt(key, defaultValue);
}
然后,您可以在代码中使用这些功能来保存音乐的状态。您可以使用status.setStatus(0);
而不是status.setStatus(1);
代替Utils.savePreferences(context, "music_status", 1);
和status.getStatus()
,而不是Utils.loadPreferences(context, "music_status", 0);
Parcelable
课程中的 One option for you is to implement musicStatus
。然后,您可以通过Intent将对象发送到第二个活动。您可以在下面找到一个实现Parcelable
的示例类。
一旦你拥有了它,你就可以通过Intent传递它:
musicStatus status = new musicStatus();
status.setStatus(8);
Intent intent = new Intent(this, HighScoreActivity.class);
intent.putExtra("status", status);
startActivity(intent);
班级实施:
public class musicStatus implements Parcelable {
private int status;
public int getStatus() {
return status;
}
public void setStatus(int status){
this.status = status;
}
private musicStatus(Parcel in) {
status = in.readInt();
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(status);
}
public static final Parcelable.Creator<musicStatus> CREATOR = new Parcelable.Creator<musicStatus>() {
public musicStatus createFromParcel(Parcel in) {
return new musicStatus(in);
}
public musicStatus[] newArray(int size) {
return new musicStatus[size];
}
};
public int describeContents() {
return 0;
}
}
在这种情况下,这确实是一种反模式。但是,它仍有可能。
public class musicStatus {
private static musicStatus mInstance = null;
private int status;
@NonNull
public static musicStatus getInstance() {
if (mInstance == null) {
synchronized(mInstance) {
if (mInstance == null) {
mInstance = new musicStatus();
}
}
}
}
public int getStatus(){
return status;
}
public void setStatus(int status){
this.status = status;
}
}
答案 1 :(得分:2)
最简单的方法是,您的musicStatus类需要实现Serializable。
Bundle bundle = new Bundle();
bundle.putSerializable("musicStatus", status);
intent.putExtras(bundle);
在其他活动中:
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
musicStatus status=
(musicStatus)bundle.getSerializable("musicStatus");
答案 2 :(得分:0)
在您的POJO课程中扩展Serviceable
。
在开始活动2之后。
intetn.putExtra("obj",pojoObj);
并使用。
获取第二项活动PojoCls obj = (PojoCls)getIntent().getSerializableExtra("obj");
多数民众赞成。