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