我試圖實現prefs並解決了我以前的問題,但它改爲它只是造成了另一個問題 - 一個偏好問題。它似乎表明它來自我放在onCreate()方法上的幾行。Prefs錯誤 - Android'引起:java.lang.ClassCastException:java.lang.Boolean不能轉換爲java.lang.String'
具體表現在記錄它下面說 -
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.your.app/com.your.app.activity}: java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:225)
at com.your.app.activity.onCreate(ShopActivity.java:105*At the oncreate shown*)
所以我試圖解決這個問題,但我無法找到一個解決方案。我正在用代碼製作一款遊戲,並設法創建了一個硬幣系統,您可以在下面看到這些硬幣,還包括使用標籤系統滾動汽車。問題在於,每次加載該活動時似乎都會顯示該錯誤。 我以前沒有遇到過這個問題,並且正在使用其他方法。這是代碼。感謝所有幫助。該代碼還在嘗試修復錯誤時進行了編輯。 -
對於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;
爲的OnDestroy方法 -
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();
對於涉及這個問題也是在實際的代碼onCreate- -
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);
}
}
});
個
變量實例化(在開始活動) -
private String savelocked = "Locked or Unlocked";
private String savelocked2 = "Locked or Unlocked";
private String savelocked3 = "Locked or Unlocked";
private String savelocked4 = "Locked or Unlocked";
private String savelocked5 = "Locked or Unlocked";
public String status1 = "Locked";
public String status3 = "Locked";
public String status2 = "Locked";
public String status4 = "Locked";
public String status5 = "Locked";
public String locked;
public String locked2;
public String locked3;
public String locked4;
public String locked5;
private static SharedPreferences prefs;
感謝您的幫助。我以前在使用==時沒有這個問題,這次我使用.equals()。對不起,冗長的代碼。並請幫助。所有的幫助表示讚賞。感謝您的時間。 編輯 - 很多代碼已被截斷,上面的代碼指的是一般意義。 編輯2 - 也包括實例化的變量。 再次感謝您的幫助。
這是太多的代碼。通過編寫一個最小的完整示例來幫助我們來幫助您,這個示例演示您遇到的問題。 (你甚至可能會發現確定這個過程可以幫助你自己解決問題。) – yshavit
好的。謝謝。等一下。那時我會得到一般想法。謝謝。 –
剛剛編輯。謝謝你的幫助。 –