记一次Android网络请求过程中静态成员变量导致的问题

   最近在项目过程中使用到了okhttp网络框架,在给服务器以post键值对方式提交数据时服务器一直给空指针的异常,心想这次终于也发现后台人员的锅了,哈哈,但出于负责任自己用接口测试工具请求数据竟然没错误,细心一想着者很可能是是自己前端的问题,于是开始排查问题。

   在debug模式下发现三个参数的键值都是一样的,what?怎么可能,细心看了自己的代码键值也没有错误,于是开始看传的参数的构造方法,果不其然网络请求框架中的Prams类被定义为了静态内部类,其成员变量也被定义为静态的,估计是之前同事没有 很好的理解java中静态成员变量的加载过程,导致我在构造很多了参数是出现了问题。

我在构造参数时直接这样使用:

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};

下边是构造参数的过程

Builderbuilder=newBuilder();

for(Paramparam: params) {

builder.add(param.key,param.value);

Log.i("okhttp",param.key);

}

熟悉java类加载的过程的同学看到这里,肯定知道了问题的所在,静态成员变量是存储方法 区内存中,而且只会存在一份数据。所以说我打印出来的param.key值三个都是 searchId,所以服务器也会报空指针的错误,最后把static 关键字给去掉,加上gette或者setter就解决了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,577评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,523评论 25 709
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,951评论 0 62
  • 我有多喜欢你了呢? 大概就是这么喜欢吧,公交车上看到你的侧脸,第一反应是想摸摸你的耳朵。 因为要见你,所以中午不午...
    少女俱乐部阅读 3,730评论 0 0
  • 前言:上一篇文章讲了iOS蓝牙开发的基础与Demo的应用http://www.jianshu.com/p/6e07...
    iOS_ZK03阅读 9,239评论 4 49

友情链接更多精彩内容