关于findbyId一个view以后,这个view还是报空指针的错误
2015-09-10 16:47
260 查看
今天测试人员给我提了一个程序崩溃的问题,我看了一下代码,执行了一遍,确定了崩溃的原因是有一个TextView变成了null。如代码所示
确定了原因,那改起来就很容易了,我的方法是一进入这个fragment,就让view取得保存在SharedPreferences里的数据,而不是像上面的代码那样当请求出错时才给view设置值。
再请求的网络啊。
当然AsyncGsonRequest是项目里的其他人写的一个请求网络的类,很有可能是在这个类里,当网络请求不成功时,将所有的View都变成null了,需要重新再find一遍。然而这只会在这个fragment里,而在其它的里并不会有这个错误。
让我想不明白的是nickName_tv 为什么会变成null呢?希望有大神可以解答我的疑惑。
[code]/** * 从服务器中请求数据 */ public void reqData() { GetUserTopReq getUserTopReq = new GetUserTopReq(userId, userId); new AsyncGsonRequest<GetUserTopRes>(Constants.GETUSERDETAIL, getUserTopReq, context) { @Override protected void onPostExecute(GetUserTopRes res) { if (res != null && res.recode == 0) { reqUnreadMsg(); initDatas(res.iwUserInfo); String json = new Gson().toJson(res); SharedPreferencesManager.saveWoFragmentData(json); } } @Override protected void onPostError(VolleyError e) { LogUtil.e(TAG, "获得用户信息失败", e); // 如果访问服务器失败,使用SharedPreferences里的数据 User user = SharedPreferencesManager.getLoginInfo(); if (!TextUtils.isEmpty(user.getUsername())) { nickName_tv.setText(user.getUsername()); } } } }.execute();
确定了原因,那改起来就很容易了,我的方法是一进入这个fragment,就让view取得保存在SharedPreferences里的数据,而不是像上面的代码那样当请求出错时才给view设置值。
[code]虽然解决了bug但是让我纳闷的是好好的nickName_tv(它是一个TextView)怎么会变成NULL了呢,我明明是先
[code]nickName_tv = (TextView) view.findViewById(R.id.nickName_tv);
再请求的网络啊。
当然AsyncGsonRequest是项目里的其他人写的一个请求网络的类,很有可能是在这个类里,当网络请求不成功时,将所有的View都变成null了,需要重新再find一遍。然而这只会在这个fragment里,而在其它的里并不会有这个错误。
让我想不明白的是nickName_tv 为什么会变成null呢?希望有大神可以解答我的疑惑。
相关文章推荐
- Swift UINavigationController(导航控制器)的创建及导航栏的设置
- SQLServer - 约束
- 深入浅出javascript闭包的用途和几种写法
- 二维数组作为函数参数
- UVA 11468 Substring (AC自动机)
- C++静态库与动态库(转)
- ThinkPHP-3.2.3学习
- 3D建模与处理软件简介
- win10开机出现关键错误“开始菜单和Cortana无法工作”该如何解决?
- 实现小程序:返回给定文件描述符的文件标志说明
- win7 64位安装tortoise svn客户端及subversion服务器端教程
- c++结构体字节对齐
- Spring MVC源码深入剖析执行流程
- Asp.Net 小型网站的制作(六),涵盖了asp.net里面所有的基础知识
- iphone 开发之pch文件的创建与使用
- Android Volley的基本用法
- MCC(移动国家码)和 MNC(移动网络码)
- 32位与64位机器下各数据类型长度对比
- linux下如何从终端打开文件夹,并且获取管理员权限
- 《高性能MySQL》第五章