我在一个活动中有一个评级栏,一旦选择了评级,我希望它通过一个意图将值传递回主活动,以便在警告对话框中显示。这是代码,它工作正常:
public void addListenerOnRatingBar() {
ratingBar = (RatingBar) findViewById(R.id.ratingBar);
txtRatingValue = (TextView) findViewById(R.id.txtRatingValue);
//if rating value is changed,
//display the current rating value in the result (textview) automatically
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromUser) {
txtRatingValue.setText(String.valueOf(rating));
String numStars = String.valueOf(rating);
Intent a = new Intent(getBaseContext(), MainActivity.class);
a.putExtra("numStars", numStars);
startActivity(a);
}
});
}
在主要活动中,我试图设置一个if语句,以便只有在字符串不是空的情况下才会出现警告对话框,但每次都会使程序崩溃。这是代码:
Bundle extra = getIntent().getExtras();
String numStars = extra.getString("numStars");
if (numStars.length() == 0) {
final AlertDialog dialog = new AlertDialog.Builder(this).create();
dialog.setMessage("Thank you for rating this app " + numStars + " Stars! ");
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}
);
dialog.show();
}
知道我做错了吗?
答案 0 :(得分:0)
String numStars = extra.getString("numStars");
if (numStars.length() == 0) {
这不是检查值是否存在的正确方法。
如果Bundle中不存在某个值,尝试获取它会返回null
,因此您必须这样检查:
String numStars = extra.getString("numStars");
if (numStars == null) {
请注意,如果您未使用putExtra()
向意图添加数据,则该包将为空,getIntent().getExtras()
将返回null。因此,对于这种情况,最好还添加if (extra == null)
支票。
如果找不到值,也可以提供getString
应返回的默认值。在这种情况下,您可以使用numStars.length() == 0)
:
String numStars = extra.getString("numStars", ""); // default value of ""
if (numStars.length() == 0) {
答案 1 :(得分:-1)
开关:
String numStars = getIntent().getStringExtra("numStars");
对此:
extra
因为您正在将字符串传递给MainActivity&不是捆绑,当然您的{{1}}捆绑将始终为空。