-4
我试图在按钮单击时将sharedpreferences中的图像的资源id保存在图标上,然后尝试将该resid设置为图像。但我得到“字符串不能转换为整数”错误。我的问题可能很愚蠢,但我想解决它。我将非常感激。我的代码在这里。如果key不存在 int defaultimageres=R.mipmap.ic_launcher;
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 storedImageres=sharedPreferences.getInt(getString(R.string.keyimage1),defaultimageres);
这里我残油设置图像
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