2017-03-01 99 views
-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(); 
     } 
    }); 
} 
+0

为什么你正在使用getString? getInt(getString(这里是 –

+0

)还有你的logcat错误 –

+0

getString(R.string.keyimage1)在这里我得到我的密钥存储在string.xml文件中 com.SavingDataSample.image“ – LanguageMaster

回答

0

嗨朋友感谢您的支持评论,但我解决它我的自我。我int转换成字符串,并将editor.putString方法尝试

代码中的onclick方法:

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)); 
相关问题