2016-05-21 6 views
-1

私はprefsを実装しようとしていました。優先順位の問題が発生したばかりです。それは、私がonCreate()メソッドに書いた行からのものであることを示しているようです。Prefs Error - 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-における問題に関与する実際のコードについて

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方法について- 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; 

-

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 - インスタンス化された変数も含まれています。 再度お返事ありがとうございます。

+3

これはあまりにも多くのコードです。あなたが持っている問題を示す最小限の完全な例を書いて、私たちがあなたを助けてくれるように助けてください。 (あなた自身が問題を解決するのを手助けするプロセスがあなた自身を解決するのに役立つかもしれません。) – yshavit

+0

Ok。ありがとう。一分。私はその時の一般的な考えを得るでしょう。ありがとう。 –

+0

ちょうど編集されました。ご協力いただきありがとうございます。 –

答えて

1

あなたはゲームプログラマを歓迎します。取得したエラーは、その名前のプリファレンス変数があることを意味しますが、何らかの理由で、見つかったデータ型が文字列ではありません。

にあなたのonCreateのコードを変更する:ちょうど店舗と異なる設定変数に同じ情報を取得する

prefsEditor.putString("savelocked", status1); 

:に

status1 = prefs.getString("savelocked", "Locked"); 

とあなたのonDestroyでのもの。正直なところ、私があなたのコードで見ることができるものから、私はまだあなたが最初にそのエラーをなぜ受けているのか分かりません。しかし、それが動作すれば、それは動作します。

3

(申し訳ありません答えとしてこれを追加するには、私はコメントを追加するのに十分な担当者を持っていない) あなたも「()イコール」を使用する必要があり、他の行があります。

をすべての場所では、あなたが持っている場所:

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

(または "sportscar2"、または任意の文字列)を使用すると、中に保管してください

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

を使用する必要がありますJavaの文字列もオブジェクトであることを覚えておいてください。したがって、それらは同じオブジェクトの完全に同じインスタンスではないため、そのように比較することはできません。したがって、あなたは.equals()を使用する必要があります

+0

実際の問題ではありませんが、助けていただきありがとうございます。 –

+0

もちろん、私は試みますが。 –

+0

いいえ、エラーを修正しませんでした。 –

関連する問題