使用TextUtils.isEmpty()遇到的坑

Android开发中,我们经常使用TextUtils.isEmpty()来判断字符串是否为null或者空字符串,防止出现空指针异常,但是之前使用这个方法的时候,出现了一点小问题,所以记录下来,防止以后再犯。

TextUtils.isEmpty()的实现如下:

    /**
     * Returns true if the string is null or 0-length.
     * @param str the string to be examined
     * @return true if str is null or zero length
     */
    public static boolean isEmpty(CharSequence str) {
        if (str == null || str.length() == 0)
            return true;
        else
            return false;
    }

一般情况下使用是没问题的。
现在我们考虑这样一种情况:假设实体Student有一个属性name,String类型。后台在响应这个属性到手机端的时候,是这样赋值的name = xxx + “”,这样可以防止name属性为null,但是如果xxx为null,响应的name是什么样的呢?我们测试一下。
null字符串

响应过来的其实是字符串“null”,这样我们再使用TextUtils.isEmpty()进行非空判断的时候,就会出错,遗漏掉一种情况。健全的判断方法应该是:

!((TextUtils.isEmpty(name)) && ("null".equalsIgnoreCase(name)))

转载于:https://www.cnblogs.com/lishbo/p/9956006.html

protected void onCreate(Bundle savedInstanceState) { 60 super.onCreate(savedInstanceState); 61 62 Intent intent = getIntent(); 63 String msg = intent.getStringExtra(EXTRA_CONNECT_HELP_MSG); 64 mBuilder = new COUIAlertDialogBuilder(this); 65 if (!TextUtils.isEmpty(msg)) { 66 mDialog = createDialog(msg); 67 } 68 if (mDialog == null) { 69 finish(); 70 return; 71 } 72 mDialog.setIcon(android.R.drawable.ic_dialog_info); 73 if(DBG) { 74 Log.d(TAG, "msg= " + msg); 75 } 76 Handler mHandler = new Handler(Looper.myLooper()); 77 mHandler.postDelayed(new Runnable() { 78 public void run() { 79 if (!isFinishing() && !isDestroyed()) { 80 try { 81 mDialog.show(); 82 } catch (Exception e) { 83 Log.e("WindowManagerBad ", e.toString()); 84 } 85 } 86 } 87 }, 200); 88 HashMap<String, String> eventMap = new HashMap<String, String>(); 89 eventMap.put(KEY_USER_CLICK, "false"); 90 OplusBtUtility.onCommon(this, LOG_TAG_BT_DATA_COLLECTOR, EVENT_ID_BT_CONNECT_HELP_RECORDER, eventMap, true); 91 getWindow().setGravity(Gravity.BOTTOM); 92 } 78行报错如下: android.view.WindowManager$BadTokenException at android.view.ViewRootImpl.setView(ViewRootImpl.java:1784) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:463) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:158) at android.app.Dialog.show(Dialog.java:370) at com.oplus.bluetooth.feature.connecthelp.OplusBTConnectHelpActivity$1.run(OplusBTConnectHelpActivity.java:78) at android.os.Handler.handleCallback(Handler.java:959) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:282) at android.os.Looper.loop(Looper.java:387) at android.app.ActivityThread.main(ActivityThread.java:9500) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1005) 应该怎么修改
最新发布
08-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值