menuDemo运行有误,无法读取dish_tb表

menuDemo运行有误,无法读取dish_tb表

闪退,问题在第26行,数据库(表)复制成功,log打印:2020-08-04 20:58:31.931 4132-4132/? D/sdkf: 成功:/data/user/0/com.example.menudemo/files/imooc_menu.db,并且数据表两张内容齐全,但是debug显示说没有此表"dish_tb"我改了路径为外存,复制同样成功,但是仍然一样没有解决,用的是真机华为android9.0,没有解决办法吗?难道只能挑选真机调试吗?如下:http://img1.sycdn.imooc.com//climg/5f2a921909c76c3714370801.jpg


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕雪 2020-08-06 09:44:46

是的,这是手机内部的bug,也就是说你在清除手机APP时,并没有把数据库完全的清除掉,这个数据库在某个缓冲区里没有清干净。而你往里写数据呢,又因为这个缓冲区导致写入了,又读不到。即使你把手机恢复出厂设置也是解决不了的,这并不是华为整个品牌手机的问题,而是某个版本的偶发问题。你也可以选择回退到你的上一个版本,网上找一下“华为手机助手”进行操作,这个方法是一定能解决的。你也可以先试试代价小的操作:重建module,不要用之前的包名类名,试试,如果这个方法还不行,那就只能回退版本了。祝:学习愉快

  • 提问者 慕运维0750787 #1
    这个我都试过了,重建了module,改成另外一个名字,也不行,昨晚查询了,终于找到原因了。 db.disableWriteAheadLogging();//禁用WAL模式 MenuDao里的函数插入一句代码即可, public static SQLiteDatabase getInstance(Context context){ if(db == null){ db = new MenuDao(context).getReadableDatabase(); db.disableWriteAheadLogging();//禁用WAL模式,强制使用Journal模式,Android9.0的sqlite3默认开启了WAL(Write-Ahead-Logging)预写式日志,数据库的工作方式发生了变化, // 程序没有从导入的数据库查询,而是查询生成的文件immoc_menu.db_wal,这里的数据不全 Log.e("sdkf","数据库复制成功,路径="+context.getCacheDir().getAbsolutePath()+"/imooc_menu.db"); } return db; }
    2020-08-06 10:38:42
  • 好帮手慕雪 回复 提问者 慕运维0750787 #2
    非常感谢你的反馈,如果是代码bug的话,会安排相关人员尽快修复
    2020-08-06 11:23:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师