【问题标题】:Some problems with SharedPreferences BooleanSharedPreferences Boolean 的一些问题
【发布时间】:2015-08-12 07:59:21
【问题描述】:

我有三个类,menu.class、level1.class、level2.class。

我有以下main.xml 数据

<Button
    android:id="@+id/f1"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_marginRight="10dp"
    android:background="@drawable/button1" />

<ImageView
    android:id="@+id/f2lock"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:src="@drawable/levellocked" />

<Button
    android:id="@+id/f2"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:background="@drawable/button2"
    android:visibility="gone" />

我有以下main.class 数据

f1 =(Button)findViewById(R.id.f1);      
f1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v){
        Intent i =new Intent(getApplicationContext(), level1.class);
        startActivity(i);            
    }             
}); 
f2=(Button)findViewById(R.id.f2)
f2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v){
        Intent i =new Intent(getApplicationContext(), level2.class);
        startActivity(i);            
    }             
});   

f2按钮的条件是GONE,所以在level1.class

if(answer.equalsIgnoreCase("8"))
    SharedPreferences preferences = getSharedPreferences("preferences", MODE_PRIVATE);
boolean levelTwoUnlocked = preferences.getBoolean("f2");

if(levelTwoUnlocked){
    f2.setVisibility(View.VISIBLE);
    f2lock.setVisibility(View.GONE);
}
    else {
    f2.setVisibility(View.GONE);
    f2lock.setVisibility(View.VISIBLE);
} 

意思是 f2 按钮 setVisibility(View.VISIBLE) 但我在 boolean levelTwoUnlocked = preferences.getBoolean("f2"); 中收到此错误

SharedPreferences 类型中的方法 getBoolean(String, boolean) 不适用于参数(字符串)

已更新。

我已经像这样更改了代码

if(answer.equalsIgnoreCase("8"))
    SharedPreferences preferences = getSharedPreferences("preferences", MODE_PRIVATE);
    boolean levelTwoUnlocked = preferences.getBoolean("f2", false);

if(levelTwoUnlocked){
    f2.setVisibility(View.VISIBLE);
    f2lock.setVisibility(View.GONE);
}
    else {
    f2.setVisibility(View.GONE);
    f2lock.setVisibility(View.VISIBLE);
} 

但是游戏被强制关闭了,是不是把代码放在了错误的类中?因为我把上面的代码放在level1.class而不是menu.class

【问题讨论】:

    标签: java android boolean sharedpreferences


    【解决方案1】:

    这是安卓文档。

    public abstract boolean getBoolean (String key, boolean defValue)
    

    从首选项中检索一个布尔值。

    参数

    key:要检索的首选项的名称。

    defValue: 如果此首选项不存在,则返回值。

    退货

    如果存在,则返回首选项值或 defValue。如果此名称的首选项不是布尔值,则抛出 ClassCastException。

    现在你的问题:

    它清楚地表明你也需要传递一个默认值。

    像这样改变你的电话

    boolean levelTwoUnlocked = preferences.getBoolean("f2", false); // or true according to your default value
    

    PS:请不要认为我无礼,但是当错误明确指出方法定义不匹配或任何其他此类情况时,您应该至少查找一次文档。 p>

    【讨论】:

    • 你应该把代码放在menu.class。您一定遇到了崩溃,因为 f2f2lock 在那里不可用。
    • logcat 没用过兄弟,因为我用 Bluestack 测试过项目,avd 太慢了
    • 在 menu.class 中仍然强制关闭
    • 你原来的问题已经解决了。您应该针对此问题发布一个新问题。没有 logcat 或完整的代码,我无能为力。无论如何,请发布一个新问题。
    • 哦,对不起,我的错误,我忘了做 f2lock finviewbyid
    猜你喜欢
    • 2013-08-01
    • 2011-07-23
    • 2016-03-17
    • 2017-04-20
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    相关资源
    最近更新 更多