在app关闭时删除SharedPreferences

时间:2013-10-16 02:44:58

标签: android checkbox sharedpreferences oncheckedchanged

我有一个使用SharedPreferences跟踪Users项目集合的应用。但是我一直抱怨他们使用复选框输入他们的项目,当他们重新启动应用程序时,他们的收藏显示为空。

以下是复选框的代码

SharedPreferences data;

data = getSharedPreferences(filename, 0); 

checkbox = (CheckBox) findViewById(R.id.checkbox);

checkbox.setOnCheckedChangeListener(this);

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    // TODO Auto-generated method stub
    switch (buttonView.getId()) {
    case R.id.checkbox:
        bHave = checkbox.isChecked();
        if (bHave == true) {
            SharedPreferences.Editor e = data.edit();
            e.putBoolean(have, bHave);
            e.commit();
        } else {
            SharedPreferences.Editor e = data.edit();
            e.putBoolean(have, bHave);
            e.commit();
        }
        break;
    }
}

一旦选中此框就会写入SharedPreferences,因此我知道数据已保存。

这是填充复选框的代码

private void myGetChecked() {
    // TODO Auto-generated method stub

    bHave = data.getBoolean(have, false);

    if (bHave == true) {
        checkbox.setChecked(true);
    }
}

哪个应该从SharedPreferences获取数据。

几点......

  1. 适用于我必须测试的2个移动设备,Droid X2和LG Spectrum 2。
  2. 有人提到它没有用,LG Optimus G,DROID RAZR HD,Desire HD和Trac-Phone SGH-S959G。
  3. 不会抛出任何错误,因此我无法发布LogCat。
  4. 我已仔细检查并确保所有名称都与键和变量匹配。
  5. 我对整个应用程序使用相同的首选项文件,但是它的编码方式,一次只有一个活动读/写文件。
  6. 任何人都知道为什么有些用户会删除他们的数据?如果您需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:-1)

很酷,您可以在包中创建SharedPreferences类

import java.util.HashMap;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class SessionManager {

    // Shared Preferences
    SharedPreferences pref;

    // Editor for Shared preferences
    Editor editor;

    // Context
    Context _context;

    // Shared pref mode
    int PRIVATE_MODE = 0;

    // Sharedpref file name
    private static final String PREF_NAME = "stackoverflowreply";

    // All Shared Preferences Keys
    private static final String IS_CHEKD = "ischekd";



    // Constructor
    @SuppressLint("CommitPrefEdits")
    public SessionManager(Context context) {
        this._context = context;
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = pref.edit();
    }


    public void createchekdstatus(boolean ischekd) {
        // Storing login value as TRUE
        editor.putBoolean(IS_CHEKD, ischekd);


        // commit changes
        editor.commit();
    }






    public void unchekd() {
        // Clearing all data from Shared Preferences
        editor.clear();
        editor.commit();

    }

    /**
     * Quick check for login
     * **/

    public boolean getchekdstatus() {
        return pref.getBoolean(IS_CHEKD, false);
    }

}

然后您可以将数据存储在活动中

SessionManager session = new SessionManager(getApplicationContext());
session.createchekdstatus(true);

然后从SharedPreferences中查找任何ur活动

中的数据
essionManager session = new SessionManager(getApplicationContext());
boolean chekboxstatus = session.getchekdstatus();

享受

答案 1 :(得分:-1)

在我向一些用户询问他们是否仍有问题之后,有人回复说它已修复。他们没有说明他们是否在更新前卸载了应用程序,或者他们是否清除了应用程序数据。

看起来这根本不是问题,这就是为什么我无法复制它。