我正在做一个应用程序,我有一个函数,它无限地将一个UserPreference赋值给一个字符串,我不明白为什么。
java文件:
public class generalSettings extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.general_settings);
List<Schedule> schedules = getSchedule();
if (schedules.isEmpty()) {
from.setSummary("--:--");
to.setSummary("--:--");
} else {
from.setSummary(schedules.get(0).getStartTime());
to.setSummary(schedules.get(0).getEndTime());
}
private List<Schedule> getSchedule() {
String cameraServiceSchedule = UserSharedPref.initializeSharedPreferencesForcameraServiceSchedule(getApplicationContext()).getString(UserSharedPref.cameraServiceSchedule, "");
String[] scheduleStrings = cameraServiceSchedule.split(";");
List<Schedule> schedules = new ArrayList<>();
Log.d("TESTa:",cameraServiceSchedule);
for (String scheduleString : scheduleStrings) {
String[] times = scheduleString.split(",");
if (times.length == 2) {
try {
Log.d("TEST:","adding only 1");
schedules.add(new Schedule(Integer.parseInt(times[0]), Integer.parseInt(times[1])));
break;
} catch (NumberFormatException ex) {
Log.d("TEST:","getting a NumberFormatException");
ex.printStackTrace();
}
}
}
return schedules;
}
}
}Schedule.java:
public class Schedule {
private Integer startTime;
private Integer endTime;
public Schedule() {
}
public Schedule(Integer startTime, Integer endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
public Integer getStartTime() {
return startTime;
}
public void setStartTime(Integer startTime) {
this.startTime = startTime;
}
public Integer getEndTime() {
return endTime;
}
public void setEndTime(Integer endTime) {
this.endTime = endTime;
}
}当我记录时,这个2018-11-01 17:19:27.445 4346-4346/? D/TESTa:: 891,1131;在不同的时间被连续打印,直到应用程序运行。
所以,Testa是无限打印的,这是cameraServiceSchedule的日志记录输出,它是从用户偏好文件中初始化的,但是为什么,它甚至不在一个循环中,需要一次又一次地初始化。同样的对象schedules.get(0)被一次又一次地覆盖,当我这样做的时候,我也记录了这一点。有什么解决方法吗?
发布于 2018-11-01 20:31:16
使用这种方法,这肯定是有效的
这是你的主要活动
/**
* Created by harkal on 01-11-2018.
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ScheduleData scheduleData = new ScheduleData(this);
if(scheduleData.getSchedule() == null){
//set schedule here
scheduleData.setSchedule(new Schedule(0, 0)); //set the schedule here i have put 0 just like that
}else{
//get the data and use it
int startTime = scheduleData.getSchedule().getStartTime(); //this is the starting time use it how ever you want
int endTime = scheduleData.getSchedule().getEndTime(); //similarly this is the ending time use it how ever you want
}
}
}这是您的共享首选项类
/**
* Created by harkal on 01-11-2018.
*/
public class ScheduleData {
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
private static final String SCHEDULE_DATA = "SCHEDULE_DATA";
private static final String SCHEDULE = "SCHEDULE";
public ScheduleData(Context context) {
sharedPreferences = context.getSharedPreferences(SCHEDULE_DATA , 0);
editor = sharedPreferences.edit();
}
public void setSchedule(Schedule schedule) {
Gson gson = new Gson();
String json = gson.toJson(schedule);
editor.putString(SCHEDULE, json);
editor.commit();
}
public Schedule getSchedule() {
Gson gson = new Gson();
String json = sharedPreferences.getString(SCHEDULE, null);
return gson.fromJson(json, Schedule.class);
}
}这是计划对象文件
/**
* Created by harkal on 01-11-2018.
*/
public class Schedule {
private int startTime;
private int endTime;
public Schedule() {
}
public Schedule(int startTime, int endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
public int getStartTime() {
return startTime;
}
public void setStartTime(int startTime) {
this.startTime = startTime;
}
public int getEndTime() {
return endTime;
}
public void setEndTime(int endTime) {
this.endTime = endTime;
}
}我已经使用了google的gson库,只需将此行粘贴到您的应用程序gradle文件中
implementation 'com.google.code.gson:gson:2.8.5'希望它能帮助您愉快地编写代码:)
如果有任何问题,leme知道它
https://stackoverflow.com/questions/53100796
复制相似问题