检查意图是否为空

时间:2015-10-26 14:56:44

标签: java android

我在一个活动中有一个评级栏,一旦选择了评级,我希望它通过一个意图将值传递回主活动,以便在警告对话框中显示。这是代码,它工作正常:

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();


    }

知道我做错了吗?

2 个答案:

答案 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}}捆绑将始终为空。