当getIntent.getExtras返回空值

时间:2018-04-16 16:04:24

标签: java android string nullpointerexception null

我有两个活动ChatRoom活动和chat_message activty。在ChatRoom活动中 我有一个alertDialog,它询问用户的user_name并将user_name作为字符串传递给下一个活动,即chat_message。

alertDialog Box的代码是

private void request_user_name() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Enter name:");

final EditText input_field = new EditText(this);

builder.setView(input_field);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
          name = input_field.getText().toString();
    }
});

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialogInterface.cancel();
        request_user_name();
    }
});

builder.show();

}

我使用下面的代码传递user_name字符串

intent.putExtra("user_name",name);

以下是我收到额外内容的第二项活动中的代码

user_name = getIntent().getExtras().get("user_name").toString();

但是当没有设置user_name时,它的应用程序崩溃,出现java null指针异常错误。

那么如何处理getIntent或者如何在收到空值或根本没有值时设置默认用户名?

提前致谢。

3 个答案:

答案 0 :(得分:0)

试试这个:

    String user_name="" ; 
    if(getIntent()!=null){
      if(getIntent().hasExtra("user_name")){
      user_name = getIntent().getStringExtra("user_name");
     }
    }
    if(!TextUtils.isEmpty(user_name)){
     user_name = "Default"; // Or set your default name
   }

TextUtils检查user_name是否为Empty为空,如果是,则可以设置默认用户名,否则您的姓名将从之前的活动中传出。

希望这有帮助!

答案 1 :(得分:0)

正在发生的事情是,其中一个模型返回null,因为它不存在。现在,根据您的代码,它可能是意图,额外或名称。 在分配名称字符串之前,您必须先抢先检查每个值。

if (getIntent().getExtras() != null
     && getIntent().getExtras().get("user_name")!=null) {

    user_name = getIntent().getExtras().get("user_name");

}

但这实际上是一种粗暴的方式。你真正想要做的是:

String name = "";

Intent intent = getIntent();
if (intent != null) {
    ExtrasModel extras = intent.getExtras();

    if (extras != null) {
        name = extras.get("user_name");
    }
}

答案 2 :(得分:0)

建议:始终使用常量来放置额外的键。喜欢

public static final String EXTRA_USER_NAME = "user_name";

您的解决方案:检查捆绑包是否有该密钥。

 String user_name = null;
    if (getIntent()!=null && getIntent().getExtras() !=null && getIntent().hasExtra(EXTRA_USER_NAME))
        user_name = getIntent().getStringExtra(EXTRA_USER_NAME);

    if (!TextUtils.isEmpty(user_name)) {
        // TODO: DO HERE YOUR STUFF
    }

如果您不确定要传递额外内容,请添加getIntent()!=null && getIntent().getExtras() !=null