ボタンをクリックして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();
}
});
}
理由あなたはgetStringを使用していますか? getInt(getString(ここでは –
)あなたのlogcatエラーを解消するには –
getString(R.string.keyimage1)ここに私のキーがstring.xmlファイル " com.SavingDataSample.image " –
LanguageMaster