我有两个活动聊天室活动和chat_message活动。聊天室内部活动我有一个alertDialog,它要求用户提供他们的user_name并将user_name作为字符串传递给下一个chat_message的活动。
警报对话框的代码是
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空指针异常错误。
那么如何处理getIntent或当它收到空值或根本没有值时如何设置默认用户名?
提前谢谢。
建议:始终使用常量来放置额外的键。
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
。
正在发生的事情是,沿途的一个模型返回 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");
}
}
试试这个:
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是否为空,如果是,则可以设置默认用户名,否则您的姓名将从以前的活动中传递。
希望这有帮助!