记项目中的一次错误之RecyclerView

来源:互联网 发布:电子打鼓软件下载 编辑:程序博客网 时间:2024/05/18 03:12

前言

项目中viewpager中的fragment中使用了RecyclerView显示当前发布的商品和结束发布的商品

现象

上午测试的时候出现了一个很奇怪的错误,viewpager总共有两页,从第一页移动到第二页的时候,没有反应。从第二页往回滑动的时候,总是程序直接奔溃。错误打印如下:

java.lang.NullPointerException   at android.support.v7.widget.RecyclerView.onInterceptTouchEvent

ps:在调试这个的过程中,发现后台使用desc字段表示描述(使用注解 @column,加上@Lob也是不行),从java实体类使用hibernate自动生成更新数据库表时无法创建该表。又是查注解,又是改变字段长度。反反复复得折腾了一遍都不行,后来其删除就可以创建表了,猜想可能是字段名的原因。
以前在项目中也遇到过数据库使用了一个struts的保留字,struts封装参数成对象的时候一直出错。后来才知道这是保留字

解决

网上大概意思是说没有设置布局。但是我是的确添加了是在notifyDataSetChange之前设置了布局,但是就是报错。
其实是在goodses.size()==0的情况下没有设置布局。但是不知道为什么就潜意识的觉得这种情况不需要设置布局,只有在adapter更新的时候才需要。

 btProgressDialog.dismiss();        if (msg.isSuccess() && goodses.size() == 0) {                Toast.makeText(mContext, "您还没有发布过商品,去发布商品吧", Toast.LENGTH_LONG).show();            } else if((msg.isSuccess() && goodses.size() > 0)) {                mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));                mAdapter.notifyDataSetChanged(goodses);            }else {            Toast.makeText(mContext, msg.getMsg(), Toast.LENGTH_LONG).show();        }

其实细细思索,真是无稽之谈。于是在所有的if情况都set布局,ok不管怎么滑都没事。再一想,在onPostExecute中显示一定需要执行一次设置布局,那么肯定是我理解错了,在onPre 设置布局或者更甚在显示RecyclerView之后就应该设置布局。在fragment中的initView中直接给RecyclerView设置布局。运行,怎么滑动都是ok。

 private void initView() {        rv_current_publish.setLayoutManager(new LinearLayoutManager(getActivity()));        new MyPublishAsyncTask(getActivity(),goodses,rv_current_publish,isQueryCurrentPublish).execute();    }

血泪教训啊:一定要记得为RecyclerView添加布局

总结

在解决这个的过程中发现了一个新的问题
亲,刷新页面试试
断点调试从2直接跳到 最后一句 return e.getMsg();而且这一句
Msg.generateSuccMsg();详细代码

public  static Msg generateSuccMsg(){        return  new Msg(true,"ok");    }

图中2箭头的语句绝对不会产生异常,但是现实就是从2断点往下执行时直接跳到左边转弯箭头指向位置。不仅跳到catch中了,而且还跳过了一句,直接执行return e.getMsg()了。不知道是我的问题还是编辑器的原因。???

0 0