使用SharedPreference在android中保存活动?

时间:2017-07-12 10:39:56

标签: java android

我有一个应用程序,在mainActivity中,用户有大约5个选项可供选择。单击其中一个会打开一个新活动,但基本上所有5个活动都会打开具有不同标题的相同活动。在新打开的活动中,用户使用多个评级栏将点委托给某些指定的属性。使用SharedPreference,我可以保存整个活动,所以当我退出时,点击相同的选项,一切都没有消失吗?或者我是否需要使用SharedPreference保存个别评级栏值?

以下是从按钮单击打开的其中一个活动的一些代码。有些东西是非常错误的,因为它现在崩溃了。有什么建议吗?

public class MageSkillScreen extends AppCompatActivity

{

    public float skillPoints = 10;
    public float strengthRating;
    public float intellectRating;
    public float wisdomRating;
    public float dexterityRating;
    public float totalSkill;


    public float mageStrength;
    public float mageDexterity;
    public float mageIntellect;
    public float mageWisdom;

    public RatingBar strengthBar;
    public RatingBar intellectBar;
    public RatingBar wisdomBar;
    public RatingBar dexterityBar;
    Button submit;

    //preferences
    SharedPreferences magePref;
    boolean rememberRatings = true;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mage_skill_screen);

        strengthBar = (RatingBar) findViewById(R.id.mageStregth);
        intellectBar = (RatingBar) findViewById(R.id.mageInt);
        wisdomBar = (RatingBar) findViewById(R.id.mageWisdom);
        dexterityBar = (RatingBar) findViewById(R.id.mageDext);
        submit = (Button) findViewById(R.id.submit);
    }

    @Override
    public void onPause()
    {
        SharedPreferences.Editor edit = magePref.edit();
        edit.putFloat("strengthPts", strengthBar.getRating());
        edit.putFloat("dexterityPts", dexterityBar.getRating());
        edit.putFloat("intellectPts", intellectBar.getRating());
        edit.putFloat("wisdomPts", wisdomBar.getRating());
        //edit.putString("pointsLeft", ptsRemaing.getText().toString());
        edit.commit();

        super.onPause();
    }

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

        rememberRatings = magePref.getBoolean("mageRatings", true);

        mageStrength =  magePref.getFloat("strengthPts", 0.0f);
        mageDexterity = magePref.getFloat("dexterityPts", 0.0f);
        mageIntellect = magePref.getFloat("intellectPts", 0.0f);
        mageWisdom = magePref.getFloat("wisdmPts", 0.0f);
    }
}

2 个答案:

答案 0 :(得分:0)

更新函数onResume

中的视图活动
@Override
protected void onResume() {
     super.onResume();
     //load SharedPreferences again and update view

}

答案 1 :(得分:0)

好的,我们一步一步走。

  

所以我有一个应用程序,在mainActivity中,用户大约有5个   可供选择的选项。

好的,听起来不错,所以用户在 MainActivity 中有5个按钮。

  

单击其中一个会打开一个新活动,但基本上全部打开5个活动   不同标题的相同活动。

可以,你可以在这里更具体一点,点击一个按钮应该启动一个单独的活动而不是全部5.这是不可能的,一次只有一个活动存在供用户查看或与之交互。其他人,进入后台。 请阅读相同的活动生命周期。

https://developer.android.com/guide/components/activities/activity-lifecycle.html

  

使用SharedPreference,我可以保存整个活动,以便在我回来时   out,点击相同的选项一切都没有消失?

不,您无法将整个活动保存在共享偏好中。 SharedPref用于存储键值对,例如hashMap,只有原始值,您可以存储活动,您永远不应该这样做。

https://developer.android.com/reference/android/content/SharedPreferences.html

现在,回到相同的解决方案。

这完全取决于您尝试实现的用例,如果您在每次单击按钮时启动不同的活动并希望在其他活动中保留一些数据,则将原始值存储在sharedpref中 然后在其他活动中访问它。如果你想在应用程序重新启动时保留相同的数据,这也是成立的。

如果没有,那么你可以拥有一个单例对象并修改它并访问它,跨越其他活动,确保将其设为null以避免内存泄漏。

我希望它能解除你的怀疑。

干杯.. !!