0

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

这是复选框的代码

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. 它适用于我必须测试的两台移动设备,一台 Droid X2 和一台 LG Spectrum 2。
  2. 有人提到它无法正常工作,LG Optimus G、DROID RAZR HD、Desire HD 和 Trac-Phone SGH-S959G。
  3. 没有错误被抛出,所以我不能发布 LogCat。
  4. 我已经仔细检查并确保键和变量中的所有名称都匹配。
  5. 我对整个应用程序使用相同的首选项文件,但它的编码方式一次只有一个活动读取/写入文件。

有人知道为什么有些用户会删除他们的数据吗?如果您需要更多信息,请告诉我。

4

2 回答 2

-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 中检索数据

essionManager session = new SessionManager(getApplicationContext());
boolean chekboxstatus = session.getchekdstatus();

请享用

于 2013-10-16T03:27:55.967 回答
-1

在我询问了一些用户是否仍然存在问题后,一位回答说已解决。他们没有说他们是否在更新之前卸载了该应用程序,也没有说明他们是否清除了应用程序数据。

看起来这根本不是问题,这就是我无法复制它的原因。

于 2013-10-21T17:51:29.147 回答