SharedPreferences中的所有键都返回相同的值

时间:2016-06-09 11:49:26

标签: android sharedpreferences

我第一次使用共享首选项并收到错误。
我的代码是这样的:

public class MainActivity extends Activity {
 static final String ONE = ""; 
 static final String TWO = "";
 private static SharedPreferences mSharedPreferences;

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

SharedPreferences.Editor edi = mSharedPreferences.edit();
  edi.putString(ONE, "1");
  edi.putString(TWO, "2");
  edi.commit();

 String one = mSharedPreferences.getString(ONE,"1");
 String two = mSharedPreferences.getString(TWO,"2");
 System.out.println("Your Numbers: "one+ "   " + two);
 }
 }

预期产出:

 Your Numbers:  1   2

控制台输出:

 Your Numbers:  2   2

我无法弄清楚我做错了什么。分享您的观点。

3 个答案:

答案 0 :(得分:3)

您需要在名称/键上添加一些字符串。目前两个键名都是空白,因此您的代码将覆盖相同的首选项值 。 如下更改静态字符串,它应该可以正常工作。

static final String ONE = "one"; 
static final String TWO = "two";

还尝试使用帮助程序类,使共享首选项更简单。这是我写的:Android-SharedPreferences-Helper

答案 1 :(得分:2)

因此:

static final String ONE = ""; 
static final String TWO = "";

将其更改为:

static final String ONE = "One"; 
static final String TWO = "Two";

U需要每个偏好的唯一值。 在你的情况下,ONE会被TWO覆盖。

额外信息

如果您查看Android文档here,您会看到putString需要两个参数:

  • key : String: The name of the preference to modify.
  • value : String: The new value for the preference.

如果你看到getString here,你会发现它还有两个参数,都与putString相同:

  • key : String: The name of the preference to retrieve. - 重要
  • defValue : String: Value to return if this preference does not exist.

名称/密钥是让get部分了解获取值所需的首选项的部分。

希望这会让你的事情更加清晰!

答案 2 :(得分:1)

两个字符串都是空的

var t = '.......';

应该是这样的:

static final String ONE = ""; 
static final String TWO = "";