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

来源:互联网 发布:淘宝贷款在哪里 编辑:程序博客网 时间:2024/06/12 20:20
最近在做新闻客户端,需要从网上抓取数据并保存到数据库中,具体流程如下:

     安卓客户端向服务器请求数据,服务器接收到请求后开启爬虫线程,后台抓取指定网页的数据,将抓到的数据以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