2017-03-01 5 views
-4

ボタンをクリックしてsharedpreferencesにある画像のリソースIDを保存し、その画像にその画像を設定しようとしました。しかし、私は "文字列がIntegerにキャストできません"というエラーが表示されています。私の質問は愚かかもしれないが、私はそれを解決したい。私はそれに非常に感謝します。私のコードはここにあります。java.lang.ClassCastException:java.lang.Stringをjava.lang.Integerにキャストすることはできません

b4.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int res=R.drawable.kiss; 
      image.setImageResource(res); 
      editor.putInt(getString(R.string.keyimage1),res); 
      editor.apply(); 
     } 
    }); 

デフォルト値キーは、私は次の行に取得しています int defaultimageres=R.mipmap.ic_launcher;

エラーが存在しない場合。

int storedImageres=sharedPreferences.getInt(getString(R.string.keyimage1),defaultimageres); 

と、ここで私がイメージにRESIDを設定しています

image.setImageResource(storedImageres); 

LogCat:

FATAL EXCEPTION: main 

       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pra1.savingdatasample/com.example.pra1.savingdatasample.MainActivity}: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
        at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:158) 
        at android.app.ActivityThread.main(ActivityThread.java:7225) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
       Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 
        at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:242) 
        at com.example.pra1.savingdatasample.MainActivity.onCreate(MainActivity.java:47) 
        at android.app.Activity.performCreate(Activity.java:6876) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)  
        at android.app.ActivityThread.access$1100(ActivityThread.java:221)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:158)  
        at android.app.ActivityThread.main(ActivityThread.java:7225)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  

ここでは私のonCreateメソッドです:私はその完全な混乱を知っている:P

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    b1=(Button)findViewById(R.id.button); 
    b2=(Button)findViewById(R.id.button2); 
    b3=(Button)findViewById(R.id.button3); 
    b4=(Button)findViewById(R.id.button4); 
    ed1=(EditText)findViewById(R.id.editText1); 
    ed2=(EditText)findViewById(R.id.editText2); 
    tv1=(TextView)findViewById(R.id.textView); 
    tv2=(TextView)findViewById(R.id.textView2); 
    image=(ImageView)findViewById(R.id.imageView); 

    SharedPreferences sharedPreferences=this.getPreferences(Context.MODE_PRIVATE); 
    final SharedPreferences.Editor editor=sharedPreferences.edit(); 
    int defaultimageres=R.mipmap.ic_launcher; 
    String defaultvaluetext1=getResources().getString(R.string.text1); 
    String storedtext1=sharedPreferences.getString(getString(R.string.keytextview1),defaultvaluetext1); 
    int storedImageres=sharedPreferences.getInt(getString(R.string.keyimage1),defaultimageres); 
    image.setImageResource(storedImageres); 
    tv1.setText(storedtext1); 

    String defaultvaluetext2=getResources().getString(R.string.text2); 
    String storedtext2=sharedPreferences.getString(getString(R.string.keytextview2),defaultvaluetext2); 
    tv2.setText(storedtext2); 
    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String text1=ed1.getText().toString(); 
      if(text1.equals(null)||text1.equals("")){ 
       Toast.makeText(getApplicationContext(),"empty text",Toast.LENGTH_SHORT).show(); 
      }else { 
       tv1.setText(text1); 
       editor.putString(getString(R.string.keytextview1), text1); 
       editor.apply(); 
       ed1.setText(""); 
       InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       manager.hideSoftInputFromWindow(ed1.getWindowToken(), 0); 
      } 
     } 
    }); 
    b2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String text2= ed2.getText().toString(); 
      if(text2.equals(null)||text2.equals("")){ 
       Toast.makeText(getApplicationContext(),"empty text",Toast.LENGTH_SHORT).show(); 
      } 
      else { 
       tv2.setText(text2); 
       editor.putString(getString(R.string.keytextview2), text2); 
       editor.apply(); 
       ed2.setText(""); 
       InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       manager.hideSoftInputFromWindow(ed2.getWindowToken(), 0); 
      } 
     } 
    }); 
    b3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int res=R.drawable.rtl; 
      image.setImageResource(res); 
      editor.putInt(getString(R.string.keyimage1),res); 
      editor.commit(); 
     } 
    }); 
    b4.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int res=R.drawable.kiss; 
      image.setImageResource(res); 
      editor.putInt(getString(R.string.keyimage1),res); 
      editor.commit(); 
     } 
    }); 
} 
+0

理由あなたはgetStringを使用していますか? getInt(getString(ここでは –

+0

)あなたのlogcatエラーを解消するには –

+0

getString(R.string.keyimage1)ここに私のキーがstring.xmlファイル " com.SavingDataSample.image " – LanguageMaster

答えて

0

こんにちはお友達に感謝しますコメントしますが、私はそれを自分自身で解決します。私は、文字列にint型に変換し、onclickの方法でeditor.putString方法で

コードを、それを試してみてください。

b4.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int res=R.drawable.kiss; 
      String resnew=String.valueOf(res); 
      image.setImageResource(res); 
      editor.putString(IMAGE_KEY,resnew); 
      editor.apply(); 
     } 
    }); 

を、これは私のキー

private static final String IMAGE_KEY="com.SavingDataSample.image"; 

これらは変更され

int defaultimageres=R.mipmap.ic_launcher; 
    String deafultimageValue=String.valueOf(defaultimageres); 

    String storedImageres=sharedPreferences.getString(IMAGE_KEY,deafultimageValue); 
    image.setImageResource(Integer.parseInt(storedImageres)); 
関連する問題