首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无限赋值SharedPreference,但是如何赋值呢?

无限赋值SharedPreference,但是如何赋值呢?
EN

Stack Overflow用户
提问于 2018-11-01 19:54:38
回答 1查看 38关注 0票数 0

我正在做一个应用程序,我有一个函数,它无限地将一个UserPreference赋值给一个字符串,我不明白为什么。

java文件:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)被一次又一次地覆盖,当我这样做的时候,我也记录了这一点。有什么解决方法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-01 20:31:16

使用这种方法,这肯定是有效的

这是你的主要活动

代码语言:javascript
复制
/**
 * 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
        }

    }
}

这是您的共享首选项类

代码语言:javascript
复制
/**
 * 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);
    }

}

这是计划对象文件

代码语言:javascript
复制
/**
 * 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文件中

代码语言:javascript
复制
implementation 'com.google.code.gson:gson:2.8.5'

希望它能帮助您愉快地编写代码:)

如果有任何问题,leme知道它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53100796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档