【问题标题】:Sharedpreferences android studio error saving data [duplicate]Sharedpreferences android studio错误保存数据[重复]
【发布时间】:2018-07-26 06:50:55
【问题描述】:

我使用 sharedpreference 从 numberDecimal 编辑文本中保存了我的数据。当我想在另一个活动中获取该数据时,它始终显示为空,因此未正确保存。有什么建议吗?

这是我保存数据的代码:

public void Start(View view) {
    EditText LevelEdit = (EditText) findViewById(R.id.editText_LevelCurrent);
    String User_Level = LevelEdit.getText().toString();
    if (User_Level == "") {
        Toast.makeText(this, "Select a level",
                Toast.LENGTH_LONG).show();

    } else {


        SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString(GameConstants.StringvalueOfLevel,User_Level);
        editor.commit();


        Intent myIntent = new Intent(Mygame_Menu.this, Mygame.class);
        startActivity(myIntent);
    }
}

【问题讨论】:

标签: java android sharedpreferences


【解决方案1】:

我认为你的条件是错误的,因为你在共享首选项中保存空对象不要检查这样的字符串 if (User_Level == "")the == 运算符不能在 java 中的字符串上工作!你应该使用 equals 方法来比较像这样的字符串"Amir".equals("Amir")

改用这个if (User_Level==null||User_Level.isEmpty())

【讨论】:

    【解决方案2】:

    您缺少将sharedPreference 名称作为参数导致error

    不是这个

     SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPref.edit();
    

    改变

    SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("sharedPreferenceName",Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPref.edit();
    

    【讨论】:

    • 我得到编译错误:类 Activity 中的方法 getPreferences 不能应用于给定类型;必需:int 找到:String,int 原因:实际参数列表和形式参数列表的长度不同
    • 调用getPreferences("",)时使用getApplicationContext();
    • 再次查看我的答案
    • 我应该写什么而不是“sharedPreference”? GameConstants.StringvalueOfLevel 还是 User_Level?
    • sharedPreference 是您的 sharedPreference 的名称,就像数据库中的表名
    【解决方案3】:

    您不能在if 循环中将字符串值与int 格式进行比较。改变

    if(User_Level == "")
    

    收件人

    if(User_Level.equals(""))
    

    所以它会检查条件是否正确。否则上面会执行 else 部分,即使它为空。

    已编辑

     private static final String PREFS_NAME = "PREF_LEVEL_DATA";
     private static final String PREFS_KEY = "LEVEL";
    
     public void SaveLevel(Context context, String level) {
    
        SharedPreferences settings = context.getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString(PREFS_KEY, level);
    
        editor.commit();
    }
    
    public String RetrieveLevel(Context context) {
    
        String level;
        SharedPreferences settings = context.getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);
    
        if (settings.contains(PREFS_KEY)) {
            level = settings.getString(PREFS_KEY, "");
        } else {
            return "";
        }
        return level;
    }
    

    用于存储值

    SaveLevel(getApplicationContext(), User_Level);
    

    获取一个值

    String level = RetreiveLevel(getApplicationContext());
    

    更新

     EditText LevelEdit = (EditText) findViewById(R.id.editText_LevelCurrent);
     String User_Level = LevelEdit.getText().toString();
     if (User_Level.equals("")) {
        Toast.makeText(this, "Select a level",
                Toast.LENGTH_LONG).show();
    
     } else {
    
    
        SharedPreferences sharedPref = getSharedPreferences("ANY_PREFERENCE_NAME",
            Context.MODE_PRIVATE); //Replace "ANY_PREFERENCE_NAME" as your own string
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString(GameConstants.StringvalueOfLevel,User_Level);
        editor.commit();
    
    
        Intent myIntent = new Intent(Mygame_Menu.this, Mygame.class);
        startActivity(myIntent);
    }
    

    【讨论】:

    • 谢谢,但是数据还是没有保存
    • 更新您检索数据的方式。并且还使用偏好名称。查看我的编辑。
    • 我写的是什么而不是 PREFS_NAME,我保存数据的位置的名称或我要保存的字符串的名称? (它通过 SharedPreferences 设置返回错误 = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    • PREFS_NAME 和 PREFS_KEY 都是字符串值。你可以换成你自己的。您可以使用相同的 PREFS_NAME 来存储多个值。并且 PREFS_KEY 是唯一用于引用您的存储值的。
    • PREFS_NAME 是您的值存储在本地首选项中的共享首选项名称。您可以创建 n 个首选项名称来分隔您的数据组。在单个 PREFS_NAME 中,您可以在 PREFS_KEY 的参考帮助下存储 n 个值。
    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2017-12-06
    相关资源
    最近更新 更多