首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的变量在I volley调用成功后被设置为null

在I volley调用成功后,变量被设置为null的原因可能是由于以下几种情况:

  1. 作用域问题:请确保变量的作用域正确。如果变量是在方法内部声明的,并且在方法外部被引用,那么可能会导致变量在方法执行完后被销毁,从而被设置为null。可以尝试将变量声明在方法外部或者使用类成员变量来解决该问题。
  2. 异步调用:I volley是一个异步网络请求库,它的请求是在后台线程中执行的。当请求成功返回后,会通过回调函数来处理响应数据。如果在回调函数中对变量进行操作,而该回调函数是在主线程中执行的,那么可能会出现变量被设置为null的情况。这是因为在网络请求完成之前,主线程可能已经执行完毕,导致变量被销毁。可以尝试在回调函数中检查变量是否为null,并及时处理。
  3. 请求失败:如果I volley的请求失败了,可能会导致变量被设置为null。可以通过查看请求的返回状态码、错误信息等来确定请求是否成功。如果请求失败,可以尝试重新发送请求或者进行错误处理。

综上所述,当变量在I volley调用成功后被设置为null时,可能是由于作用域问题、异步调用或请求失败等原因导致的。可以根据具体情况进行排查和处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

volley请求原理

Volley Volley 是 Google 推出 Android 异步网络请求框架和图片加载框架。 Google I/O 2013 大会上发布。...流程图 Volley 请求流程图 上图是 Volley 请求时流程图, Volley 发布演讲中给出,在这里将其用中文重新画出。 4.... Handler 对应线程中传输缓存调度线程或者网络调度线程中产生请求结果或请求错误,会在请求成功情况下调用 Request.deliverResponse(…) 函数,失败时调用 Request.deliverError...通过构造函数 listener 传参,支持请求成功 onResponse(…) 回调。...个人认为不足之处 缓存再验证方面,构建If-Modified-Since请求首部时,Volley 使用了服务端响应Date首部,没有使用Last-Modified首部。

2.1K60

Volley源码分析学习

【扩展】关于 User Agent 通过代码我们发现如果是使用 AndroidHttpClient,Volley 还会将请求头中 User-Agent 字段设置 App packageName/...= null) { //请求成功,将处理结果String回调给成功监听器 mListener.onResponse(response);...ETags:它和if-None-Match(HTTP协议规格说明定义ETag请求变量实体值”,或者是一个可以与Web资源关联记号)常用来判断当前请求资源是否改变。...如果这时候取消,就直接结束分发 接着判断响应结果是否成功(即判断Response中VolleyError属性是否空),如果成功,就调用Request中deliverResponse方法,把Response...= null) { //回到响应成功监听 mListener.onResponse(response); } } 如果不成功调用

1.9K60

Android Volley 源码解析(一),网络请求执行流程

一、Volley 简介 ---- Volley 是 Google 2013 年 I/O 大会上推出 「Android 异步网络请求框架和图片加载框架」,它设计目标就是去进行 数据量不大,但 通信频繁...默认情况下,每条请求都是应该缓存,当然我们也可以调用 Request setShouldCache() 方法来进行设置。...Request 添加到缓存队列中,在后台等待缓存线程就要开始运行起来了,我们看下 CacheDispatcher run() 方法究竟是怎么实现。...,在这里总结一下,可以看到初始化了 Cache 之后,有一个 while(true) 循环,说明缓存线程是始终执行,接着会在缓存中取出响应结果,如果 null 的话,就将其加入到网络请求队列中,如果不为空的话...需要注意标注第一个地方,调用了 Stack executeRequest() 方法,这里 Stack 就是之前调用 Volley.newRequestQueue() 所创建实例,前面也说过了这个对象内部是使用了

1.3K40

Android面试题含答案「建议收藏」

当我们通过startService启动时候,通过intent传值,onStartCommand()方法中获取值时候,一定要先判断intent是否null。...IO 和 NIO这两个都是Java中概念,如果从硬盘读取数据,第一种方式就是程序一直等,数据读完才能继续操作这种是最简单也叫阻塞式IO,还有一种是你读你,程序接着往下执行,等数据处理完你再来通知...如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经成功接收,则结束TCP连接。 【问题3】为什么不能用两次握手进行连接?...在这种情况下,C认为连接还未建立成功,将忽略S发来任何数据分 组,只等待连接确认应答分组。而S发出分组超时,重复发送同样分组。这样就形成了死锁。...服务器每收到一次客户端请求都会重新复位这个计时器,时间通常是设置2小时,若两小时还没有收到客户端任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。

1.3K20

Android训练课程(Android Training) - 使用Volley传输网络数据(Transmitting Network Data Using Volley

当你添加请求到队列中,它被缓存线程获拾取和分类: 如果请求可以从缓存中服务,缓存中原始响应内容缓存进程中解析,并且解析响应内容传递到主线程。...注意哪些 昂贵操作,比如阻塞I/O,和解析/解码,都是工作线程中完成。你可以在任何线程中添加请求,但是响应总是传递到主线程中。 图表 1 插图说明一个请求生命周期: ? 图 1....请求生命周期. 中断一个请求(Cancel a Request) 要中断一个请求, 在你请求对象上 调用 cancel()方法.一旦中断后,Volley会确保 你响应处理器 绝对不被调用。...() 方法是否已经调用,或者其他自卫性样板代码。...如果你 依赖 你响应处理器,以变动一个状态或者踢开一些步骤,你需要记得这些。再次强调,终止相应处理绝不会被调用

2.2K00

Android常用库源码解析

网络请求是通过url打开连接,返回一个HttpURLConnection对象,进行网络请求。加载得资源后转换到主线程并进行回调设置给imageview。 glide为什么有lru还会内存溢出。...因此最终替换为了OkHttp volley原理 主线程中调用RequestQueueadd()方法来添加一条网络请求,这条请求会先加入到缓存队列当中,如果发现可以找到相应缓存结果就直接读取缓存并解析...为什么Volley适合数据量小,通信频繁网络操作 volley中为了提高请求处理速度,采用了ByteArrayPool进行内存中数据存储,如果下载大量数据,这个存储空间就会溢出,所以不适合大量数据...然后是开发者使⽤ addNetworkInterceptor(Interceptor) 所设置,它们逻辑和使⽤ addInterceptor(Interceptor) 创建⼀样,但由于位置不同...(有的话回收了,没有的话就没有回收) 如果Activity没有回收,调用GcTigger.runGc方法运行GC,如果这时候还没有回收,那就说明Activity可能已经泄露。

1.1K10

Android Volley 源码解析(三),图片加载实现

一、图片加载基本用法 ---- 进行源码解析之前,我们先来看一下 Volley 中有关图片加载基本用法。...URL 地址 2、图片请求成功回调,这里我们将返回 Bitmap 设置到 ImageView 中 3、4 分别用于指定允许图片最大宽度和高度,如果指定网络图片宽度或高度大于这里值,就会对图片进行压缩... ImageListener 中传入所加载图片 URL,以及图片占位符和加载失败显示图片,最后调用 ImageLoader.get() 方法便能进行图片加载。...先进行一些容错性处理,然后调用 ImageLoader 来获取对应 bitmap,最后将其设置给 NetworkImageView....总结 Volley 源码解析系列,到这里就全部结束了,这是写过最长系列文章了,从一开始 Volley 源码阅读,到之后代码整理以及现在文章输出,花了差不多一个星期时间,不过对于网络加载和图片加载有了更深理解

82620

Android ListView异步加载图片乱序问题,原因分析及解决方案

那么目前程序思路其实是很简单,我们ListViewgetView()方法中开启异步请求,从网络上获取图片,当图片获取成功就将图片显示到ImageView上面。看起来没什么问题对吗?...其实如果你仔细通读了上一篇文章就能知道,getView()方法中传入第三个参数其实就是ListView实例,那么这里我们定义一个全局变量mListView,然后getView()方法中判断它是否空...获取到控件实例判断下是否空,如果不为空就让图片显示到控件上。...但是NetworkImageView当中就可以这么任性,仅仅调用cancelRequest()方法把请求取消掉就可以了,这主要是得益于Volley出色设计。...由此可见即使是Volley也无法做到中断一个正在执行线程,如果有一个线程正在执行,Volley只会保证它执行完之后不会进行回调,但在调用者看来,就好像是这个请求就被取消掉了一样。

1.7K100

Android Volley完全解析(一),初识Volley基本用法

Android开发团队也是意识到了有必要将HTTP通信操作再进行简单化,于是2013年Google I/O大会上推出了一个新网络通信框架——Volley。...://android.googlesource.com/platform/frameworks/volley 下载完成将它导入到你Eclipse工程里,然后再导出一个jar包就可以了。...RequestQueue内部设计就是非常合适高并发,因此我们不必每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源,基本上每一个需要和网络交互Activity中创建一个...其中,目标服务器地址我们填写是百度首页,然后响应成功回调里打印出服务器返回内容,响应失败回调里打印出失败详细信息。...很遗憾,StringRequest中并没有提供设置POST参数方法,但是当发出POST请求时候,Volley会尝试调用StringRequest父类——Request中getParams()方法来获取

1.8K50

Android Volley完全解析(四),带你从源码角度理解Volley

这就要回顾一下Volley用法了,还记得吗,使用Volley第一步,首先要调用Volley.newRequestQueue(context)方法来获取一个RequestQueue对象,那么我们自然要从这个方法开始看起了...); } 这个方法仅仅只有一行代码,只是调用了newRequestQueue()方法重载,并给第二个参数传入null。...14行调用了HttpStackperformRequest()方法,这里HttpStack就是一开始调用newRequestQueue()方法是创建实例,默认情况下如果系统版本号大于9就创建HurlStack...其中第22行调用了RequestdeliverResponse()方法,有没有感觉很熟悉?...我们主线程中调用RequestQueueadd()方法来添加一条网络请求,这条请求会先加入到缓存队列当中,如果发现可以找到相应缓存结果就直接读取缓存并解析,然后回调给主线程。

1.2K80

Volley请求

Android开发团队也是意识到了有必要将HTTP通信操作再进行简单化,于是2013年Google I/O大会上推出了一个新网络通信框架——Volley。...RequestQueue内部设计就是非常合适高并发,因此我们不必每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源,基本上每一个需要和网络交互Activity中创建一个...其中,目标服务器地址我们填写是百度首页,然后响应成功回调里打印出服务器返回内容,响应失败回调里打印出失败详细信息。...很遗憾,StringRequest中并没有提供设置POST参数方法,但是当发出POST请求时候,Volley会尝试调用StringRequest父类——Request中getParams()方法来获取...连个设置POST参数方法都没有。但是不要忘记,Volley是开源,只要你愿意,你可以自由地在里面添加和修改任何方法,轻松就能定制出一个属于你自己Volley版本。 4.

1.7K70

Volley源码解读

2.调用stop方法关闭当前所有请求线程,再重新开启1个缓存请求线程和4个网络请求线程。...BlockingQueue,它特点就是从队列里取元素时候,如果队列为空,则调用此方法线程会挂起,直至队列有元素可取,线程才会继续运行。...= null) { listener.onErrorResponse(error); } } 哦,ErrorListener这个 Volley使用方式 阶段我们可以看到,我们也实现他了...五、问题 1.为什么Volley只适合于小数据请求(不超过3M)?...从源码中我们可以得知,网络请求线程只有4个,缓存请求线程只有1个,如果请求大数据,那就导致线程一定时间内被占用,5个线程很容易用完,再有请求时回导致堵塞,UI体验较差。

67670

浅谈Volley请求

我们重点看参数二 参数二我们可以明显看到了一个数 那就是规定默认磁盘缓存大小时5M 所以我们创建一个请求队列时 第一个参数得到结论是 1.volley文件夹是在这里创建, 2....回过头来 我们再来看volley类代码 Network network = new BasicNetwork(stack); 这一行代码参数好像在哪里见过 没错就是默认给我们传过来值就是null 这行代码上面...这里线程池可以优化 这里可以看到volley线程池是由数组组成 并且默认线程数四个 还可以看到第四个参数 new ExecutorDelivery(new Handler(Looper.getMainLooper..., mNetworkQueue, mCache, mDelivery 有四个参数 第三个和第四个参数是创建队列时候调用 第一和第二个参数是RequestQueue类里面已经初始化好了 这两个队列意思是首先看缓存队列里面有没有请求...值 我们已经知道是四了 意思是创建四个网络分发器 所以我们start方法里一次性启动了五条线程 以上这些内容就是我们创建一个请求队列时volley帮我们做所有事情 也就是开篇讲mRequestQueue

62330

Android仿手机通讯录地址选择功能

思路: 1.效果是仿照网上大神实现类似通讯录样式做; 2.右边a-z是自定义一个bar,设置了点击监听事件,以及对话框弹出 3.关键是adapter,判断了字母显示和隐藏 4.用到汉字转拼音...、按首字母排序等工具类 5.3个activity跳转是用回调来实现,每个activity都实现了回调,这样就有了从区activity直接跳转到首页效果 6.数据是调用本地接口实现,如果大家没有数据我可以想办法给你们提供测试省市区数据接口...加载数据是用volley框架实现 代码一个结构 ?...例,继承自SectionIndexer /** * 根据ListView的当前位置获取匪类首字母Char ascii值 * @param position * @return */...province.setSortLetters("#"); } mSortList.add(province); } return mSortList; } } ok,粘贴了部分代码,而且很多关键地方代码中加了注释

1.9K10

继续封装个 Volley 组件前言二次封装Github地址

前言 封装了这么多组件,一步步走过来,已经有了自己一定习惯下封装思路了,可能代码写得并不是很好,设计得不是很合理,内部职责划分不是很明确。 但,热衷封装思想是:一条调用链使用。...至于为什么需要二次封装 Volley,这篇就不扯了,反正每个组件封装肯定是来源于有这方面的需求。 二次封装 同样,DVolley 组件你需要了解入口也就是:DVolley ?...Volley_get.png post 方法支持 api 跟 get 一样,也就是设置下 tag(用于取消该请求),设置下请求参数,请求头,然后调用 enqueue(),内部会根据队列情况自动发起请求...,可设置回调,回调接收一个泛型参数,内部会自动根据泛型解析 json 数据回调方法中返回实体类数据。...所以,其实,封装组件做事并不多,就是将 Volley 使用流程控制起来,提供调用使用方式。

1.1K20
领券