【问题标题】:Getting Null pointer exception during String comparison在字符串比较期间获取空指针异常
【发布时间】:2015-04-12 13:33:41
【问题描述】:

将类引用传递给方法时,我得到java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference。 导致错误的行是:

if (!contactData.getContactNo().equals("")){

更多代码:

方法的调用:

recContDBHelper.insertRecord(new ContactData("", number, date)); <--Exception here

调用方法:

 public void insertRecord(ContactData contactData) {
        String name = "";
        if (!contactData.getContactNo().equals("")) { <--exception here
            name = CommonServices.getContactDisplayNameByNumber(contactData.getContactNo(), context);
            if (name.equalsIgnoreCase("")) {
                name = contactData.getContactNo();
            }
        }
    }

上面代码中contactData.getContactNo()的返回类型是String

例外是:

04-12 18:21:40.153: E/AndroidRuntime(27924): FATAL EXCEPTION: main
04-12 18:21:40.153: E/AndroidRuntime(27924): Process: com.stackoverflow.ranjith.androidprojdel, PID: 27924
04-12 18:21:40.153: E/AndroidRuntime(27924): java.lang.RuntimeException: Unable to start receiver com.stackoverflow.ranjith.androidprojdel.PhoneCallreceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
04-12 18:21:40.153: E/AndroidRuntime(27924):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2586)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at android.app.ActivityThread.access$1700(ActivityThread.java:144)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at android.os.Handler.dispatchMessage(Handler.java:102)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at android.os.Looper.loop(Looper.java:135)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at android.app.ActivityThread.main(ActivityThread.java:5221)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at java.lang.reflect.Method.invoke(Native Method)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at java.lang.reflect.Method.invoke(Method.java:372)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
04-12 18:21:40.153: E/AndroidRuntime(27924): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
04-12 18:21:40.153: E/AndroidRuntime(27924):    at com.stackoverflow.ranjith.androidprojdel.recentlyContacted.RecContDBHelper.insertRecord(RecContDBHelper.java:57)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at com.stackoverflow.ranjith.androidprojdel.PhoneCallreceiver.onReceive(PhoneCallreceiver.java:93)
04-12 18:21:40.153: E/AndroidRuntime(27924):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2579)
04-12 18:21:40.153: E/AndroidRuntime(27924):    ... 9 more

ContactData 类:

public class ContactData {
    private String contact_name;
    private String ph_no;
    private String time_call;

    public ContactData(String contact_name, String ph_no, String time_call) {
        this.contact_name = contact_name;
        this.ph_no = ph_no;
        this.time_call = time_call;
    }

    public ContactData(String contact_name, String ph_no) {
        this.contact_name = contact_name;
        this.ph_no = ph_no;
    }

    public String getContactNo() {
        return this.ph_no;
    }
}

【问题讨论】:

    标签: java android string class nullpointerexception


    【解决方案1】:

    试试这个

    if (contactData.getContactNo() != null && !contactDate.getContactNo().isEmpty()) {
        // your code here
    }
    

    似乎contactData.getContactNo() 正在返回null

    【讨论】:

    • 它怎么可能是空的。我将new ContactData("", number, date)传递给方法。
    • 是的……但是调用返回了什么?它是否返回尚未初始化的变量的值?代码说明了什么?
    • 至少有两种可能: 1. 创建对象时number为null。 2 你的吸气剂返回 null
    • @Ranjith 你从你的吸气剂那里得到空值。您应该详细说明ContactData class
    • @Froyo 添加了 ContactData 类
    【解决方案2】:

    在没有确保它不为空的情况下,不要尝试调用实例上的方法。 在您的情况下,contactData.getContactNo 为 null,并且当您尝试对其调用 equals 方法时,会抛出 NPE。 有两种方法可以避免。第一个是将空字符串与contactData.getContactNo进行比较,否则请确保contactData和contact.getContactNo不为空。

    例如:

    "".equals(contactData.getContactNo)
    

    if(contactData != null && contactData.getContactNo != null)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多