【问题标题】:How to handle solve java null pointer exception when getIntent.getExtras return null value当getIntent.getExtras返回空值时如何处理解决java空指针异常
【发布时间】:2018-09-26 10:49:51
【问题描述】:

我有两个活动 ChatRoom 活动和 chat_message 活动。 ChatRoom 内部活动 我有一个 alertDialog 询问用户他们的 user_name 并将 user_name 作为字符串传递给下一个活动,即 chat_message。

alertDialog 的代码是

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

}

我使用下面的代码来传递用户名字符串

intent.putExtra("user_name",name);

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

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

但是当没有设置user_name 时,应用程序会因java 空指针异常而崩溃。

那么当getIntent接收到null值或者根本没有值时如何处理或者设置Default username呢??

提前致谢。

【问题讨论】:

    标签: java android string nullpointerexception null


    【解决方案1】:

    试试这个:

        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 的空值,如果是,则您可以设置默认用户名,否则您的姓名是从之前的活动传递过来的。

    希望这会有所帮助!

    【讨论】:

    • 你能给我解释一下代码吗……这里的默认用户名是什么,或者我应该在这里也使用 else 语句来设置默认用户名?
    • 建议您在从上一屏取值后设置默认值,因为您的默认值可能会被上一屏的 null 覆盖
    • 它向我抛出了 user_name 错误,可能没有在 String user_name 上初始化; ,所以我改为使用 String user_name =" ";,并解决了错误。这是正确的做法吗??
    • 是的,这是正确的方法,我猜应该是 lint 错误! .解决此类错误总是好的。我也更新了。
    • 当我这样做时,它会在下面抛出一个错误 java.lang.ArrayIndexOutOfBoundsException: length=1;索引=1
    【解决方案2】:

    发生的情况是其中一个模型返回 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 name = "";但你可以将它设置为任何你想要的: String name = "SuperMan";
    • 当我将它粘贴到 onCreate 方法时,它会在 Extrasmodel 和 .get 上引发错误...我该如何解决它。
    • 我仅以 ExtrasModel 为例。那个类不存在。您应该将其检索到 .getExtras() 返回的任何类。但是,如果它让您感到困惑,请暂时忽略它。删除该行和之后的 if 语句。不过,您应该了解返回值的工作原理。
    【解决方案3】:

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

    public static final String EXTRA_USER_NAME = "user_name";
    

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

     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

    【讨论】:

    • 它给我一个 java.lang.ArrayIndexOutOfBoundsException: length=1; 的错误。索引=1
    • 编辑了我的答案 Hrithik
    猜你喜欢
    • 2021-11-08
    • 2014-01-06
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多