网页爬虫爬取数据出现 LockTimeoutException lock expired问题的可能解决方式

最近在做新闻客户端,需要从网上抓取数据并保存到数据库中,具体流程如下:

     安卓客户端向服务器请求数据,服务器接收到请求后开启爬虫线程,后台抓取指定网页的数据,将抓到的数据以javabean的形式暂存在一个list中并返回该list,此时数据库方面获取该list,并插入到数据表中。

一切准备就绪后,运行服务器,安装apk,满心欢心,充满期待的准备看数据蹦出来,

然而,问题来了,console提示错误,logcat提示数据请求失败,打印错误如下:(类似)

com.sleepycat.je.LockTimeoutException: (JE 5.0.73) Lock expired. Locker 988835149 -1_Thread-12_ThreadLocker: waited for lock

waiter:.......

开头就是这样一类的,然后再网上查找解决办法,可是找了大半天都没有,后来根据表面意思,判断应该是多个进程对同一个数据表进行读写操作时发生了错误,联想到单独运行服务器时可以输出从数据库中查询出的数据,并且安卓客户端有用到ViewPager,在加载第一页的时候它会自动进行第二页数据和布局的预加载,那么两个页面都在请求向数据表中插入数据(每个页面请求数据代码相同,且调用的都是数据库提供的接口),就产生了这一问题,带着这样的判断,就进入到ViewPager所在的类中,将数据初始化过程从

public Object instantiateItem(ViewGroup container, int position) 函数中去掉,转移到了接口onPageChangedListener中的onPageSelected(int position) 函数中,这样一来,在进行预加载的时候只会预加载下一页的布局,数据相当于延迟到页面选择时进行,

好,保存,运行,成功。


注意:我采用的是开源项目ViewPagerIndicator,只有标签和滑动的时候进行页面选择,如果是其他形式,比如点击按钮切换页面,就需要将初始化数据放到相应的函数实现中。


以上仅为个人针对自己项目中出现的问题探索解决方法的想法,如有不当之处,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值