将评级保存在共享偏好中

时间:2014-05-18 23:55:24

标签: java android ratingbar

大家好:)我一直在评级栏上工作,它运作正常,唯一的问题是它在用户离开页面或应用程序后没有保存评级。 SO的一位名叫Lal的用户帮助了我,我已经完成了所有设置,但似乎仍在做错事。它的工作方式是我在main-activity中有一个listview,当你点击listview行时,它会调用一个新类来加载相应的页面。在相应的页面上是ratingBar。我没有在mainactivity中调用ratingbar,我在类main_activity调用中调用它来引用单击的行。

以下是评级栏在ListItemActivity1.java中的代码

RatingBar ratingBar;
TextView ratingText;
SharedPreferences wmbPreference1;    
SharedPreferences.Editor editor;         
@Override
protected void onCreate(Bundle savedInstanceState) {        
super.onCreate(savedInstanceState);
setContentView(R.layout.list_item_activity_1);      
ratingText = (TextView) findViewById(R.id.rating);
((RatingBar) findViewById(R.id.ratingBar1))
.setOnRatingBarChangeListener(this);  
wmbPreference1 = PreferenceManager.getDefaultSharedPreferences(this);
float rating = wmbPreference1.getFloat("numStars", 0f);
ratingBar.setRating(rating);
}   
@Override
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromTouch) {        
final int numStars = ratingBar.getNumStars();
editor = wmbPreference1.edit();
editor.putFloat("numStars", rating);
editor.commit();      
int ratings = wmbPreference1.getInt("numStars", 0);
ratingText.setText(rating + "/" + String.valueOf(ratings));
}
}

问题出现在代码的最后一行。我收到一个错误,指出无法在基本类型int上调用toString()。我应该为此设置字符串吗?另一个问题是,使用新代码时,我在模拟器中收到错误,当我尝试在控制台中重新加载说启动画面无法加载,活动未启动时,其当前任务已被带到前面。这一切似乎源于共享偏好和上面的最后一行代码。

任何帮助都会受到赞赏,我已经被困在这个评级栏上一段时间^^并且真的想继续使用应用程序中更紧迫的部分......

1 个答案:

答案 0 :(得分:0)

要将int值转换为字符串,请使用String.valueOf(ratings)

无论如何,您的代码还有其他一些问题。在onRatingChanged()中,我假设您要将当前评级保存到SharedPreferences中。该变量为rating(因为getNumStars()返回的是总星数,而不是当前值。)

要保存此值,您应该在提交之前使用编辑器进行保存,即

editor = wmbPreference1.edit();
editor.putFloat("numStars", rating);
editor.commit();  

要在onCreate()中恢复,请执行:

float rating = wmbPreference1.getFloat("numStars", 0f);
ratingBar.setRating(rating);