向每一個錯誤致敬——當(dāng)心你的參數(shù)

每一次犯錯,都是一次蛻變个曙;每一個bug,都是一次成長锈嫩。

  1. 入?yún)⑻帲瑢?shù)進(jìn)行合法性校驗垦搬;
  2. 使用不可靠的數(shù)據(jù)時呼寸,對該數(shù)據(jù)進(jìn)行校驗;

在入?yún)⑻幍垦兀欢ㄒ獙?shù)進(jìn)行合法性校驗等舔。且看如下代碼,看看有什么問題糟趾!

public class InitChatActionDataUtil {

    public static ArrayList<String> initGridListData(String type, String remark, int isShowReserve, String doctorBed) {

        ArrayList<String> gridActionList = new ArrayList();

        gridActionList.add("相冊");
        gridActionList.add("拍照");
        gridActionList.add("表情");
        
        if (type.equals("2")) {
            //群聊慌植,生成GridView數(shù)據(jù): 相冊甚牲,拍照,表情蝶柿,紅包
            gridActionList.add("紅包");

        } else {
            //與醫(yī)生丈钙,相冊,拍照交汤,表情雏赦,評價,(預(yù)約芙扎,加床====隨機(jī)星岗,根據(jù)傳過來數(shù)據(jù)判斷)
            if (remark.equals("醫(yī)生")) {
                gridActionList.add("評價");

                if (isShowReserve == 2) {
                    gridActionList.add("預(yù)約");
                    if (doctorBed.equals("2")) {
                        gridActionList.add("加床");
                    }
                }

            }
            //小瑞:相冊,拍照戒洼,表情
            //個管:相冊俏橘,拍照,表情圈浇,評價寥掐,紅包
            if (remark.equals("個管師")) {
                gridActionList.add("評價");
                gridActionList.add("紅包");
            }
            // 與個人:相冊,拍照磷蜀,表情召耘,紅包
            if (remark.equals("患者")) {
                gridActionList.add("紅包");
            }
        }

        return gridActionList;
    }

}

在上述代碼中,我通過入?yún)ⅲ?/p>

  • type褐隆,傳入會話類型污它,是單聊,還是群聊妓灌;
  • remark轨蛤,備注,會話對象是醫(yī)生虫埂,還是個管師祥山,還是客服,or 患者掉伏;
  • doctorBed缝呕,醫(yī)生是否提供加床服務(wù);

如果斧散,入?yún)凑瘴业脑O(shè)想供常,都是正確的傳入,那么這段代碼可以正常運行鸡捐,代碼如下栈暇。

InitChatActionDataUtil.initGridListData(
                        "2",
                        "醫(yī)生",
                        1,
                        "2")

但是,如果入?yún)⒆兂扇缦逻@樣箍镜,會怎樣呢源祈?

InitChatActionDataUtil.initGridListData(
                        null,
                        null,
                        1,
                        null)

在傳入null后煎源,程序拋出異常:

reason: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxx/com.xxxx.activity.ChatMessageActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2359)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2422)
        at android.app.ActivityThread.access$800(ActivityThread.java:159)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1319)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5313)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1116)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:809)
       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at com.xxxx.utils.InitChatActionDataUtil.initGridListData(InitChatActionDataUtil.java:24)
        at com.xxxx.activity.ChatMessageActivity.findView(ChatMessageActivity.java:375)
        at com.xxxx.activity.ChatMessageActivity.onCreate(ChatMessageActivity.java:313)
        at android.app.Activity.performCreate(Activity.java:6036)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
        ... 10 more


可以看到結(jié)果:

java.lang.NullPointerException

因為,代碼變成了這樣:

null.equals("xxx")

至此香缺,算是清楚了手销。如果不對入?yún)⑦M(jìn)行校驗,程序會拋出異常图张。這里锋拖,只是羅列了一個極其簡單的場景。在實際開發(fā)中祸轮,這種情況非常多見兽埃。一定要對入?yún)⑦M(jìn)行校驗。

上面代碼改成倔撞,如下所示讲仰,才會比較安全:

    public class InitChatActionDataUtil {

    public static ArrayList<String> initGridListData(String type, String remark, int isShowReserve, String doctorBed) {

        ArrayList<String> gridActionList = new ArrayList();

        gridActionList.add("相冊");
        gridActionList.add("拍照");
        gridActionList.add("表情");

            //對入?yún)⑦M(jìn)行校驗
        if (type != null && remark != null && doctorBed != null) {
            ......

        }

        return gridActionList;
    }

下面再看另一中情形:

我從Activity A 中傳過來兩個Extra : rubyCode 慕趴、type痪蝇。

rubyCode = getIntent().getStringExtra("rubyCode"); 
UIType = getIntent().getIntExtra("type", 2);

在當(dāng)前Activity B中直接使用這兩個參數(shù),會發(fā)生什么呢冕房?

    if(rubyCode.equals("EXfsGSEs")){
        ......
    }

兩種情況:

  1. 如果rubyCode有正常的值躏啰,程序正常運行;
  2. 如果傳過來的rubyCode 是 null 呢耙册? 那就慘了8!详拙!

因此帝际,在使用rubyCode之前,要做校驗:

    if(rubyCode != null  && rubyCode.equals("EXfsGSEs")){
        ......
    }

上述饶辙,只是羅列了最簡單的情形蹲诀,也是我犯過的一些錯誤,這些錯誤讓我意識到:

不要相信任何東西弃揽,除了經(jīng)過自己檢驗脯爪,正確的,才可以相信矿微。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痕慢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涌矢,更是在濱河造成了極大的恐慌掖举,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娜庇,死亡現(xiàn)場離奇詭異塔次,居然都是意外死亡滨巴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門俺叭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恭取,“玉大人,你說我怎么就攤上這事熄守◎诳澹” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵裕照,是天一觀的道長攒发。 經(jīng)常有香客問我,道長晋南,這世上最難降的妖魔是什么惠猿? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮负间,結(jié)果婚禮上偶妖,老公的妹妹穿的比我還像新娘。我一直安慰自己政溃,他們只是感情好趾访,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著董虱,像睡著了一般扼鞋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愤诱,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天云头,我揣著相機(jī)與錄音,去河邊找鬼淫半。 笑死溃槐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撮慨。 我是一名探鬼主播竿痰,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砌溺!你這毒婦竟也來了影涉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤规伐,失蹤者是張志新(化名)和其女友劉穎蟹倾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡鲜棠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年肌厨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豁陆。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡柑爸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盒音,到底是詐尸還是另有隱情表鳍,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布祥诽,位于F島的核電站譬圣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏雄坪。R本人自食惡果不足惜厘熟,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望维哈。 院中可真熱鬧绳姨,春花似錦、人聲如沸笨农。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谒亦。三九已至,卻和暖如春空郊,著一層夾襖步出監(jiān)牢的瞬間份招,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工狞甚, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留锁摔,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓哼审,卻偏偏與公主長得像谐腰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涩盾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,095評論 25 707
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,760評論 0 15
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,965評論 6 13
  • 我變得越來越理智了 我是一直都沒得到我想要的 但是我知道我一直在成長 果然是有得必有失 只是 心病難醫(yī)
    Healer_e8b3閱讀 142評論 0 0
  • 自我效能就是相信我能行十气,不斷去強化自己的這個意識成為潛意識,需要通過完成一些小小的挑戰(zhàn)去強化春霍。像現(xiàn)在每天堅持五商學(xué)...
    423429d90f38閱讀 156評論 0 0