【问题标题】:SharedPreferences are not loadingSharedPreferences 未加载
【发布时间】:2019-07-05 16:43:05
【问题描述】:

我在物理设备 (Samsung Galaxy J4+) 上测试该应用程序。我打开它并输入数据(发往 SharedPreferences)。那么……

SharedPreferences 在使用三星屏幕底部的“,但它们 在使用“|||”使应用程序 UI 消失后点击应用程序图标时加载或三星屏幕底部的“O”按钮。后者使我得出结论,保存和加载方法都可以正常工作。

加载方法 (importSavedData()) 嵌入在MainActivity 类的onCreate() 方法中。应用中没有包含其他活动生命周期方法 [onStart(), on Resume(), onPause() 等]。

保存方法 (saveData()) 会在每次将数据输入应用程序时调用(通过按下按钮发生),所以我认为没有必要在 onStop 中包含该方法() 或 onDestroy() 方法。我确实尝试在 editor.apply() 和 editor.commit() 之间切换,但无济于事。

public class MainActivity extends AppCompatActivity {

    int winnerA;
    int winnerB;

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

    public void importSavedData() {
       SharedPreferences savedData = getSharedPreferences("savedData", 
       Context.MODE_PRIVATE);
           winnerA = savedData.getInt("winnerA_SP", 0);
           winnerB = savedData.getInt("winnerB_SP", 0);
    }

    public void saveData(){         
       SharedPreferences savedData = getSharedPreferences("savedData", 
       Context.MODE_PRIVATE);
       SharedPreferences.Editor editor = savedData.edit();
           editor.putInt("winnerA_SP", winnerA);
           editor.putInt("winnerB_SP", winnerB);       
       editor.apply();
    }

    /* saveData() is executed when the user has changed
       the value of winnerA or winnerB by pressing one of the buttons in the 
       activity. */

 }

【问题讨论】:

  • 包含您的代码,这将有助于我们更好地解决您的问题。
  • 这是您的实际代码吗? importSavedData() 在 onCreate() 里面吗??????!!!

标签: java android


【解决方案1】:

像这样覆盖 onRestart()onResume()

@Override
public void onRestart() {
    super.onRestart();
    importSavedData();
}

@Override
public void onResume() {
    super.onResume();
    importSavedData();
}

这样每次应用返回时,都会从SharedPreferences 读取值。

【讨论】:

  • 我不确定你的意思,因为在代码中 importSavedData() 确实按照你的建议定义在 onCreate() 之外。
  • 那为什么在你发布的代码中它是 INSIDE onCreate() 并且你还说:加载方法(importSavedData())在方法onCreate()中嵌入好了 ?
  • 在 onCreate() 内部调用,未定义。如果它甚至不能在 onCreate() 中调用,onCreate() 应该如何知道它需要加载数据?
  • 仔细查看您发布的代码。 importSavedData() 在 onCreate() 内定义
  • 我很抱歉。你是对的。我正在查看 saveData() 而不是 importSavedData()。我将立即尝试在 onCreate() 之外定义 importSavedData()!
【解决方案2】:

如果应用程序只是进入后台,它可能不会调用onDestroy,这意味着它回来时不会调用onCreate。将加载放在onResume 中,以便在每次活动重新进入视图时重新加载。看看Activity lifecycle

@Override
protected void onResume() {
    super.onResume();
    importSavedData();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多