Prefs错误-Android';原因:java.lang.ClassCastException:java.lang.Boolean无法转换为java.lang.String';

Prefs错误-Android';原因:java.lang.ClassCastException:java.lang.Boolean无法转换为java.lang.String';,java,android,Java,Android,我试图实现prefs并解决我以前遇到的一个问题,但它只导致了另一个问题——prefs问题。它似乎显示了它来自我在onCreate()方法上的代码行 特别是在日志中,它说:-- 所以我试图解决这个问题,但我找不到解决办法。我用代码做了一个游戏,并设法创建了一个硬币系统,你可以在下面看到,还包括使用标签系统滚动汽车。问题是,每次我加载那个活动时,它似乎都会显示这个错误。 我之前没有这个问题,而是使用了不同的方法。这是代码。谢谢你的帮助。在尝试修复错误时,代码也被编辑-- 对于onCreate方法--

我试图实现prefs并解决我以前遇到的一个问题,但它只导致了另一个问题——prefs问题。它似乎显示了它来自我在onCreate()方法上的代码行

特别是在日志中,它说:--

所以我试图解决这个问题,但我找不到解决办法。我用代码做了一个游戏,并设法创建了一个硬币系统,你可以在下面看到,还包括使用标签系统滚动汽车。问题是,每次我加载那个活动时,它似乎都会显示这个错误。 我之前没有这个问题,而是使用了不同的方法。这是代码。谢谢你的帮助。在尝试修复错误时,代码也被编辑--

对于onCreate方法--

  prefs = this.getSharedPreferences(
            "com.this.app", Context.MODE_PRIVATE);
status1 = prefs.getString(savelocked,"Locked");
    status2 = prefs.getString(savelocked2,"Locked");
    status3 = prefs.getString(savelocked3,"Locked");
    status4 = prefs.getString(savelocked4,"Locked");
    status5 = prefs.getString(savelocked5,"Locked");

    locked = status1;
    locked2 = status2;
    locked3 = status3;
    locked4 = status4;
    locked5 = status5;
 SharedPreferences.Editor prefsEditor = prefs.edit();


    prefsEditor.putString(savelocked,status1);
    prefsEditor.putString(savelocked2,status2);
    prefsEditor.putString(savelocked3,status3);
    prefsEditor.putString(savelocked4,status4);
    prefsEditor.putString(savelocked5,status5);
    prefsEditor.apply();
    final ImageView buy = (ImageView) findViewById(R.id.imageView26);
    final ImageView car = (ImageView) findViewById(R.id.imageView9);
    car.setTag("sportscar1");
    final ImageView use = (ImageView) findViewById(R.id.imageView5);
    buy.setImageResource(R.drawable.bull);
    if(car.getTag()=="sportscar1") {
        if (locked.equals("Locked")) {
            use.setImageResource(R.drawable.bull2);
        }
    }else{use.setImageResource(R.drawable.use);}
    final ImageView right = (ImageView) findViewById(R.id.imageView25);
    final ImageView left = (ImageView) findViewById(R.id.imageView24);

    buy.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (car.getTag() == "sportscar1") {
                if (locked.equals("Locked") && GameView.coinz >= 1) {
                    status1="Unlocked";
                    Colors.color1 = "sportscar1";
                    GameView.coinz = GameView.coinz - 1;
                    Toast.makeText(context, " - 1 Car Token",
                            Toast.LENGTH_SHORT).show();
                    Toast.makeText(context, "You just bought the sports car!",
                            Toast.LENGTH_LONG).show();

                    use.setImageResource(R.drawable.use);
                    buy.setImageResource(R.drawable.bull);
                } else {
                    Toast.makeText(context, " Not enough Car Tokens.",
                            Toast.LENGTH_SHORT).show();
                }
        }
    });

    left.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (car.getTag() == "sportscar1") {
                buy.setImageResource(R.drawable.bull);
                use.setImageResource(R.drawable.bull2);
                car.setTag("sportscar2");
                if (locked2.equals("Locked")) {
                    car.setImageResource(R.drawable.sportscar2_locked);
                    buy.setImageResource(R.drawable.buy);
                    use.setImageResource(R.drawable.bull2);
                } else if (locked2.equals("Unlocked")) {
                    car.setImageResource(R.drawable.sportscar2_show);
                    buy.setImageResource(R.drawable.bull);
                    use.setImageResource(R.drawable.use);
                }
        }
    });

    right.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (car.getTag() == "sportscar1") {
                buy.setImageResource(R.drawable.bull);
                use.setImageResource(R.drawable.bull2);
                car.setTag("thecar1");
                if (locked5.equals("Locked")) {
                    car.setImageResource(R.drawable.thecar1_locked);
                    buy.setImageResource(R.drawable.buy);
                    use.setImageResource(R.drawable.bull2);
                } else if (locked5.equals("Unlocked")) {
                    car.setImageResource(R.drawable.thecar1_show);
                    buy.setImageResource(R.drawable.bull);
                    use.setImageResource(R.drawable.use);

                }

            }
        }
    });

    use.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            if (car.getTag() == "sportscar2") {
                Colors.color1 = "sportscar2";

                status2="Unlocked";
                Toast.makeText(context, "You just selected the second sports car!",
                        Toast.LENGTH_LONG).show();

                buy.setImageResource(R.drawable.bull);
                use.setImageResource(R.drawable.use);
            }
        }
    });
对于OnDestroy方法--

  prefs = this.getSharedPreferences(
            "com.this.app", Context.MODE_PRIVATE);
status1 = prefs.getString(savelocked,"Locked");
    status2 = prefs.getString(savelocked2,"Locked");
    status3 = prefs.getString(savelocked3,"Locked");
    status4 = prefs.getString(savelocked4,"Locked");
    status5 = prefs.getString(savelocked5,"Locked");

    locked = status1;
    locked2 = status2;
    locked3 = status3;
    locked4 = status4;
    locked5 = status5;
 SharedPreferences.Editor prefsEditor = prefs.edit();


    prefsEditor.putString(savelocked,status1);
    prefsEditor.putString(savelocked2,status2);
    prefsEditor.putString(savelocked3,status3);
    prefsEditor.putString(savelocked4,status4);
    prefsEditor.putString(savelocked5,status5);
    prefsEditor.apply();
    final ImageView buy = (ImageView) findViewById(R.id.imageView26);
    final ImageView car = (ImageView) findViewById(R.id.imageView9);
    car.setTag("sportscar1");
    final ImageView use = (ImageView) findViewById(R.id.imageView5);
    buy.setImageResource(R.drawable.bull);
    if(car.getTag()=="sportscar1") {
        if (locked.equals("Locked")) {
            use.setImageResource(R.drawable.bull2);
        }
    }else{use.setImageResource(R.drawable.use);}
    final ImageView right = (ImageView) findViewById(R.id.imageView25);
    final ImageView left = (ImageView) findViewById(R.id.imageView24);

    buy.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (car.getTag() == "sportscar1") {
                if (locked.equals("Locked") && GameView.coinz >= 1) {
                    status1="Unlocked";
                    Colors.color1 = "sportscar1";
                    GameView.coinz = GameView.coinz - 1;
                    Toast.makeText(context, " - 1 Car Token",
                            Toast.LENGTH_SHORT).show();
                    Toast.makeText(context, "You just bought the sports car!",
                            Toast.LENGTH_LONG).show();

                    use.setImageResource(R.drawable.use);
                    buy.setImageResource(R.drawable.bull);
                } else {
                    Toast.makeText(context, " Not enough Car Tokens.",
                            Toast.LENGTH_SHORT).show();
                }
        }
    });

    left.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (car.getTag() == "sportscar1") {
                buy.setImageResource(R.drawable.bull);
                use.setImageResource(R.drawable.bull2);
                car.setTag("sportscar2");
                if (locked2.equals("Locked")) {
                    car.setImageResource(R.drawable.sportscar2_locked);
                    buy.setImageResource(R.drawable.buy);
                    use.setImageResource(R.drawable.bull2);
                } else if (locked2.equals("Unlocked")) {
                    car.setImageResource(R.drawable.sportscar2_show);
                    buy.setImageResource(R.drawable.bull);
                    use.setImageResource(R.drawable.use);
                }
        }
    });

    right.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (car.getTag() == "sportscar1") {
                buy.setImageResource(R.drawable.bull);
                use.setImageResource(R.drawable.bull2);
                car.setTag("thecar1");
                if (locked5.equals("Locked")) {
                    car.setImageResource(R.drawable.thecar1_locked);
                    buy.setImageResource(R.drawable.buy);
                    use.setImageResource(R.drawable.bull2);
                } else if (locked5.equals("Unlocked")) {
                    car.setImageResource(R.drawable.thecar1_show);
                    buy.setImageResource(R.drawable.bull);
                    use.setImageResource(R.drawable.use);

                }

            }
        }
    });

    use.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            if (car.getTag() == "sportscar2") {
                Colors.color1 = "sportscar2";

                status2="Unlocked";
                Toast.makeText(context, "You just selected the second sports car!",
                        Toast.LENGTH_LONG).show();

                buy.setImageResource(R.drawable.bull);
                use.setImageResource(R.drawable.use);
            }
        }
    });
对于与onCreate中的问题相关的实际代码--

  prefs = this.getSharedPreferences(
            "com.this.app", Context.MODE_PRIVATE);
status1 = prefs.getString(savelocked,"Locked");
    status2 = prefs.getString(savelocked2,"Locked");
    status3 = prefs.getString(savelocked3,"Locked");
    status4 = prefs.getString(savelocked4,"Locked");
    status5 = prefs.getString(savelocked5,"Locked");

    locked = status1;
    locked2 = status2;
    locked3 = status3;
    locked4 = status4;
    locked5 = status5;
 SharedPreferences.Editor prefsEditor = prefs.edit();


    prefsEditor.putString(savelocked,status1);
    prefsEditor.putString(savelocked2,status2);
    prefsEditor.putString(savelocked3,status3);
    prefsEditor.putString(savelocked4,status4);
    prefsEditor.putString(savelocked5,status5);
    prefsEditor.apply();
    final ImageView buy = (ImageView) findViewById(R.id.imageView26);
    final ImageView car = (ImageView) findViewById(R.id.imageView9);
    car.setTag("sportscar1");
    final ImageView use = (ImageView) findViewById(R.id.imageView5);
    buy.setImageResource(R.drawable.bull);
    if(car.getTag()=="sportscar1") {
        if (locked.equals("Locked")) {
            use.setImageResource(R.drawable.bull2);
        }
    }else{use.setImageResource(R.drawable.use);}
    final ImageView right = (ImageView) findViewById(R.id.imageView25);
    final ImageView left = (ImageView) findViewById(R.id.imageView24);

    buy.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (car.getTag() == "sportscar1") {
                if (locked.equals("Locked") && GameView.coinz >= 1) {
                    status1="Unlocked";
                    Colors.color1 = "sportscar1";
                    GameView.coinz = GameView.coinz - 1;
                    Toast.makeText(context, " - 1 Car Token",
                            Toast.LENGTH_SHORT).show();
                    Toast.makeText(context, "You just bought the sports car!",
                            Toast.LENGTH_LONG).show();

                    use.setImageResource(R.drawable.use);
                    buy.setImageResource(R.drawable.bull);
                } else {
                    Toast.makeText(context, " Not enough Car Tokens.",
                            Toast.LENGTH_SHORT).show();
                }
        }
    });

    left.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (car.getTag() == "sportscar1") {
                buy.setImageResource(R.drawable.bull);
                use.setImageResource(R.drawable.bull2);
                car.setTag("sportscar2");
                if (locked2.equals("Locked")) {
                    car.setImageResource(R.drawable.sportscar2_locked);
                    buy.setImageResource(R.drawable.buy);
                    use.setImageResource(R.drawable.bull2);
                } else if (locked2.equals("Unlocked")) {
                    car.setImageResource(R.drawable.sportscar2_show);
                    buy.setImageResource(R.drawable.bull);
                    use.setImageResource(R.drawable.use);
                }
        }
    });

    right.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (car.getTag() == "sportscar1") {
                buy.setImageResource(R.drawable.bull);
                use.setImageResource(R.drawable.bull2);
                car.setTag("thecar1");
                if (locked5.equals("Locked")) {
                    car.setImageResource(R.drawable.thecar1_locked);
                    buy.setImageResource(R.drawable.buy);
                    use.setImageResource(R.drawable.bull2);
                } else if (locked5.equals("Unlocked")) {
                    car.setImageResource(R.drawable.thecar1_show);
                    buy.setImageResource(R.drawable.bull);
                    use.setImageResource(R.drawable.use);

                }

            }
        }
    });

    use.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            if (car.getTag() == "sportscar2") {
                Colors.color1 = "sportscar2";

                status2="Unlocked";
                Toast.makeText(context, "You just selected the second sports car!",
                        Toast.LENGTH_LONG).show();

                buy.setImageResource(R.drawable.bull);
                use.setImageResource(R.drawable.use);
            }
        }
    });
实例化的变量(在活动开始时)--

谢谢你的帮助。我之前使用==时没有这个问题,这次使用的是.equals()。抱歉,代码太长了。请帮忙。感谢所有的帮助。谢谢你抽出时间。 编辑——许多代码已被截断,上面的代码指的是一般含义。 编辑2——还包括实例化的变量。 再次感谢您的帮助。

(很抱歉将此作为回答,但我没有足够的代表添加评论) 您还应该在其他行中使用“equals()”:

在您拥有的每个地方:

if (car.getTag()=="sportscar1") { ...
(或“sportscar2”,或任何字符串)您应该使用

if (car.getTag().equals("sportscar1")) { ...

请记住,Java中的字符串也是对象,因此不能这样比较,因为它们不是同一对象的完全相同的实例。因此,您应该使用.equals()

不客气,游戏程序员。您得到的错误意味着存在具有该名称的首选项变量,但由于某些原因,它找到的数据类型不是字符串

将onCreate中的代码更改为:

status1 = prefs.getString("savelocked", "Locked");
您的onDestroy中的内容是:

prefsEditor.putString("savelocked", status1);

只需在不同的首选项变量中存储和检索相同的信息。老实说,从我在你的代码中看到的情况来看,我仍然不知道你一开始为什么会犯这样的错误。但是如果它能工作,它也能工作。

这是太多的代码了。帮助我们帮助您,通过编写一个最小的、完整的示例来说明您遇到的问题。(你甚至可能会发现,解决这个问题的过程有助于你自己解决问题。)你能介绍一下你实例化“锁定”、“保存锁定”和“状态”变量的地方吗?无论你在哪里设定他们的价值观?我在哪里都看不到布尔人。在你的日志中,应该有更多的错误行在“原因:…”下面,这些错误行应该是“在…”这些错误行会告诉你你的代码的哪一部分,或者哪些行试图转换布尔值。这里只是在黑暗中拍摄一下。在onCreate中,请尝试:
status1=prefs.getString(“savelocked”、“Locked”)。在onDestroy中,尝试使用prefsEditor.putString(“savelocked”,status1)萨米T,非常感谢!!!!!!成功了。我已经面临这个问题将近两个月了!!非常感谢。你能把你的建议写下来作为答复吗?谢谢你的帮助,虽然这不是真正的问题。