?? 最近在項目過程中使用到了okhttp網(wǎng)絡(luò)框架,在給服務(wù)器以post鍵值對方式提交數(shù)據(jù)時服務(wù)器一直給空指針的異常,心想這次終于也發(fā)現(xiàn)后臺人員的鍋了,哈哈,但出于負(fù)責(zé)任自己用接口測試工具請求數(shù)據(jù)竟然沒錯誤,細(xì)心一想著者很可能是是自己前端的問題,于是開始排查問題。
?? 在debug模式下發(fā)現(xiàn)三個參數(shù)的鍵值都是一樣的,what?怎么可能,細(xì)心看了自己的代碼鍵值也沒有錯誤,于是開始看傳的參數(shù)的構(gòu)造方法,果不其然網(wǎng)絡(luò)請求框架中的Prams類被定義為了靜態(tài)內(nèi)部類,其成員變量也被定義為靜態(tài)的,估計是之前同事沒有 很好的理解java中靜態(tài)成員變量的加載過程,導(dǎo)致我在構(gòu)造很多了參數(shù)是出現(xiàn)了問題。

我在構(gòu)造參數(shù)時直接這樣使用:
OKHttpUtils.Paramparam=newOKHttpUtils.Param("startId", startId);
OKHttpUtils.ParamparamPage=newOKHttpUtils.Param("rows", pageSize +"");
OKHttpUtils.ParamparamSearchId=newOKHttpUtils.Param("searchId", searchId);
OKHttpUtils.Param[]pa=newOKHttpUtils.Param[]{param,paramPage,paramSearchId};
下邊是構(gòu)造參數(shù)的過程
Builderbuilder=newBuilder();
for(Paramparam: params) {
builder.add(param.key,param.value);
Log.i("okhttp",param.key);
}
熟悉java類加載的過程的同學(xué)看到這里,肯定知道了問題的所在,靜態(tài)成員變量是存儲方法 區(qū)內(nèi)存中,而且只會存在一份數(shù)據(jù)。所以說我打印出來的param.key值三個都是 searchId,所以服務(wù)器也會報空指針的錯誤,最后把static 關(guān)鍵字給去掉,加上gette或者setter就解決了。