記一次Android網(wǎng)絡(luò)請求過程中靜態(tài)成員變量導(dǎo)致的問題

?? 最近在項目過程中使用到了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就解決了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,679評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,023評論 25 709
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,257評論 0 62
  • 我有多喜歡你了呢? 大概就是這么喜歡吧,公交車上看到你的側(cè)臉,第一反應(yīng)是想摸摸你的耳朵。 因為要見你,所以中午不午...
    少女俱樂部閱讀 655評論 0 0
  • 前言:上一篇文章講了iOS藍(lán)牙開發(fā)的基礎(chǔ)與Demo的應(yīng)用http://www.itdecent.cn/p/6e07...
    iOS_ZK03閱讀 3,911評論 4 49

友情鏈接更多精彩內(nèi)容