gpt4 book ai didi

java - SharedPreferences 总是返回自定义对象的默认值

转载 作者:行者123 更新时间:2023-12-04 09:28:40 26 4
gpt4 key购买 nike

我正在制作一个简单的预算跟踪应用程序。我有一个预算类,其中存储了一些变量:预算的金额、持续时间和初始值。我在 fragment 中只有一个全局预算对象,称为“预算”,我正在尝试保存它。它似乎保存得很好,但是当我尝试检索它时,它出于某种原因返回了默认值。这是我保存和加载的方法。我只在 onCreateView 中调用 getBudget(),并且只在 onResume() 和预算编辑后调用 saveBudget。请注意日志条目。

public void saveBudget(){
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.clear();
Gson gson = new Gson();
String json = gson.toJson(budget);
Log.d("BTAG", "JSON: " + json);
editor.putString("current budget", json);
editor.commit();
}

public Budget getBudget(){
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPref.getString("current budget", null);
Log.d("BTAG", "gson from json: " + gson.fromJson(json, Budget.class));
return gson.fromJson(json, Budget.class);
}
我的日志为我当前的预算实例说明了这一点:
D/BTAG: JSON: {"amount":35.92,"frequency":"monthly","originalAmount":35.92}
D/BTAG: gson from json: null
这表明它保存没有问题,但加载不起作用。为什么 getBudget() 不起作用?

最佳答案

我认为问题可能出在:

only call saveBudget in onResume()


  • 当应用程序关闭时,您必须保存预算而不是在 onResume() . Check this Android Activity Lifecycle .
  • 另外,我认为您不应该使用硬编码字符串作为键。尝试使用字符串资源,如 Android docs .如果您在'key' 中出错,您将获得默认值。
  • 如果您保存预算然后将其加载到另一个 Activity 中,问题可能出在获得 SharedPreferences 上。实例。获取SharedPreferences使用:
  • SharedPreferences sP = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences from different activity
    你可以试试这个,我希望这会编译:
    public static final String SHARED_PREFS = "NAME_OF_SP";
    public static final String NAME_OF_VAL = "budget";

    public void saveBudget()
    {
    SharedPreferences sharedPref = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    Gson gson = new Gson();
    String json = gson.toJson(budget);
    Log.d("BTAG", "JSON: " + json);
    editor.putString(NAME_OF_VAL, json);
    editor.apply();
    }

    public Budget getBudget()
    {
    SharedPreferences sharedPref = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    Gson gson = new Gson();
    String json = sharedPref.getString(NAME_OF_VAL, null);
    Log.d("BTAG", "gson from json: " + gson.fromJson(json, Budget.class));
    return gson.fromJson(json, Budget.class);
    }

    关于java - SharedPreferences 总是返回自定义对象的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62922086/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com