android真机模拟程序 root权限下 查看项目数据库
2015-11-14 09:51
337 查看
android真机模拟程序 root权限下 查看项目数据库
作为刚入门android开发的小白菜,开发是一件特别有成就感的事情,但是自己的笔记本带不起android虚拟机是痛啊,只能从朋友那里搞了个退休下来的小米3做测试机,虽然老了点,但是学习Android是够用了,那么学着学着就接触到sqlite数据库这里了,学着用SqliteOpenHelper,在这里跌了很多坑,现在就把我遇到的一些问题及解决方法给大家分享一下,如果要我谈对这个函数的理解,我实在太菜,我还是理解的不够深,所以这里就浅谈一些我遇到的问题及解决方法。遇到的问题
- 真机模拟测试程序时创建的数据库文件在哪里找?
- SimpleCursorAdapter用的时候要注意的地方
解决方法
首先来说怎么在真机里查看程序的sqlite数据库文件,因为不是虚拟机,真机有各种权限,不要以为root了,你就真的获取了手机的所有权限,还是有很多文件夹是我们打不开的,我现在用的小米3测试机是5.11.5miui开发版,已经root,但是就是死活打不开data文件夹,因为据了解,sqlite数据库文件是生成在手机/data/data文件里的,然后各种搜索db文件也是徒劳,就在网上找解决方法然后搜着搜着就发现了adb这个东西。adb是什么?Android Debug Bridge,就是起到调试桥的作用。借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。
在sdk文件目录里的platform-tools文件夹里有个adb.exe
我们要想进入data文件夹就需要靠这个东西。
我用的是win 8系统具体操作如下
步骤:
-win+r输入cmd回车进入命令窗口
-使用cd命令进入adb.exe所在目录
例如我的adb.exe所在目录为D盘的eclipse-adt\sdk\platform-tools
那么我cmd里命令操作时先”cd \“转到c盘根目录,再“d:”转到d盘目录,然后“cd \eclipse-adt\sdk\platform-tools”
-然后输入adb shell
接着输入”su“获得root权限操作,现在我们就可以开始给data文件开通权限了,在这里我们要用到chmod命令,我们输入”chmod 777 /data“这样就解锁了data文件夹的权限,接着我在eclipse中的file explorer查看data文件,可以打开了,但是data里面的文件还是打不开,ok,那么我们继续用chomd命令继续给data里面的文件解锁权限,比如我要打开data里面的data文件我再命令黑框里继续输入”chmod 777 /data/data“,然后就可以打开data文件下的data文件了,以此类推,直到给项目里的db文件赋予权限。
这样我们就可以顺利找到数据库xxx.db文件了,然后通过eclipse把数据库文件导出到电脑,我们就可以用sqlite3命令来查看数据库文件了,具体怎么查看我在这里就不叙述了。
SimpleCursorAdapter注意事项
用到cursor 和simplecursoradapter报错:java.lang.IllegalArgumentException:
column ‘_id’ does not exist
原因:
使用Cursor相关的Adapter时需要一个自增的列,且名字必需为 _id。而我创建的表里没有这个字段。
解决方法
1)创建数据表时插入一个名为_id的列,类型为自增量,因为在使用Cursor相关的Adapter时需要用到这个列2)如果实在不需要这个列的话,可以把数据表中某一列使用AS映射为 _id,再进行操作
如,我有一个表, 表中两个字段分别为Nameid, 和TerminalID, 现在我想用一个SimpleCursorAdapter来把这个表中的数据显示到一个listView上,注意其中有”Nameid as _id”, 以及new String[]{“_id”, “TerminalID”}.
注意用法如下
Cursor cursor=db.query("dbtest", new String[]{"Nameid as _id","TerminalID"}, null, null, null, null, null); if (cursor!=null){ //将数据显示在listview中 SimpleCursorAdapter sca=new SimpleCursorAdapter(ResultActivity.this,R.layout.my_list,cursor,new String[]{"_id","TerminalID"},new int[]{R.id.textView1,R.id.textView2}, SimpleCursorAdapter.NO_SELECTION); lv.setAdapter(sca); }
2015年11月14日 9:53 by lake qq:417749092
欢迎交流
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件