当前位置: 首页 > 知识库问答 >
问题:

不使用SharedReferences保存数据

端木弘方
2023-03-14

我在共享偏好设置中出错。当我通过手机上的活动应用菜单关闭应用程序时,我的数据不会保存。只有当我通过完成亲和()关闭应用程序时,数据才会保存。帮助我修复错误。

    public class Progress extends AppCompatActivity {
    public static float progress;
    float progr;
    float sum_progr;
    String t_progress;
    public TextView etText;
    ProgressBar progressBar;
    SharedPreferences sPref;

@SuppressLint({"CutPasteId", "SetTextI18n"})
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_progress);
    etText = findViewById(R.id.text_Progress);
    t_progress=etText.getText().toString();
    progr=Float.parseFloat(t_progress);
    sum_progr=progr+progress;
    etText.setText(sum_progr+"%"); //Установили текст
    progressBar = findViewById(R.id.progressBar);
    progressBar.setProgress((int) sum_progr);
    saveText();
    loadText();
}
public void onHome(View view) {
    Intent intent=new Intent(Progress.this, MainActivity.class);
    startActivity(intent);
}
private void saveText() {
    sPref = getSharedPreferences("PROGRESS", MODE_PRIVATE);
    SharedPreferences.Editor ed = sPref.edit();
    ed.putFloat("SAVED_TEXT", sum_progr);
    ed.apply();
    Toast.makeText(Progress.this, "Text saved", Toast.LENGTH_SHORT).show();
}
@SuppressLint("SetTextI18n")
private void loadText() {
    sPref = getSharedPreferences("PROGRESS", MODE_PRIVATE);
    Float savedText = sPref.getFloat("SAVED_TEXT",0);
    etText.setText(savedText+"%");
    Toast.makeText(Progress.this, "Text loaded", Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
    super.onDestroy();
    saveText();
}

}'

共有1个答案

邹星火
2023-03-14

您应该避免从ondestory方法保存数据。从onDestroy方法上的文档:

注意:不要指望调用此方法作为保存数据的地方!例如,如果某个活动正在编辑内容提供程序中的数据,则这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处提交。

我将把你的SaveText()移动到你的活动的onP()方法来解决它:

@Override
protected void onPause() {
    super.onPause();
    saveText();
}

此外,您是否意识到每次创建活动时都会保存到SharedPrefs?我不确定你想实现什么,但我想让你了解一下。

 类似资料:
  • 我的类与共享首选项交互。 它从共享首选项加载一个字符串集,默认值包含22个字符串,保存在其<代码>章节 变量中。 当一个"完成"事件在程序的后面发生时,Storyteller会从中删除一个String,然后将其提交给Shared首选项。 我的日志显示最初加载了22个字符串,然后删除并提交到编辑器后加载了21个字符串。 当我再次运行程序时,加载的是22章,而不是预期的21章。 第一次运行的日志: 第

  • 问题内容: 我今天花了很多时间研究如何在cakephp中使用ajax请求保存数据,现在已经知道在cakephp网站上的文档似乎缺少该特定主题。 我有几个可排序的列表,对一个列表项进行排序时,我需要保存每个列表项的位置。我有一个如下设置的ajax请求,该请求在移动项目时触发: 控制器中引用的功能为: 我已经设置了助手等: 而且它不起作用… 所以我的问题是: 1)当前向控制器中的动作发送ajax请求的

  • 问题内容: 环境 hibernate4.2 ojdbc6-Oracle 11.2.0.3.0 JDBC 4.0 Oracle数据库11g 问题 我们遵循了许多建议,以如下方式配置Hibernate批处理: 我们检查了日志,发现生成的SQL语句已批处理。但是,如果两个事务同时修改相同版本的实体行,则Hibernate将成功提交它们,导致最后提交的事务中的冲突更新丢失(两个事务中都保存了无冲突的数据,

  • 我有一个问题,Spring数据没有保存实体。应用程序逻辑如下: 另一个应用程序正在监听负载相当重的Kafka主题(每秒数十条消息)并将消息插入数据库中具有“NEW”状态的表中。 @调度方法加载一个具有“NEW”状态的实体列表,这些实体被一个接一个地传输到FixedThreadPool(20个线程),它们的状态设置为“PROCESSING”和一个saveAll方法调用同一个表。 这两种日志方法都显示

  • 本文向大家介绍java使用hashMap缓存保存数据的方法,包括了java使用hashMap缓存保存数据的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java使用hashMap缓存保存数据的方法。分享给大家供大家参考,具体如下: 更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇