android开发最大的痛点之一
平常我们在开发android应用的时候,经常要调试我们本地的数据库或者是sp数据,对他进行增删改查然后看app是否正常展示等。遇到bug的时候我们通常会 找个root过的手机 进入对应的data/data/packageName/下打命令看数据,或者是在很多地方加入很多日志。其实这种调试方法很是麻烦。我们其实想的是是想和web开发者一样 有一个简单的对数据库操作的ide 给我们使用。
下面就介绍一种简单的思路来完成这个小目标,这样日后无论开发什么app只要接入这个库,即可随时调试我们的本地db或合适sp数据 非常方便。
- 如何展示我们data/data下面的数据 ?
其实很简单,我们只需要用web的方式给大家展示即可,用web网页的方式展示我们的数据,然后开发者直接在web网页上操作crud即可。
这里推荐用nanahttp 这个框架,是一个微型的http server。很适合在手持设备上使用。我们可以用一个service来监听这个httpserver 即可完成上述的功能。就跟我们正常开发前端页面一样,只不过这里我们把html js等文件放到我们assets目录下而已。
不要忘记引入nanaohttpd
compile 'org.nanohttpd:nanohttpd:2.2.0'
- 如何展示出数据库?
先拿到我们app的数据库路径:
File root = mContext.getFilesDir().getParentFile(); File dbRoot = new File(root, "/databases"); mDatabaseDir = dbRoot;
然后看一下这个目录下有几个数据库文件 就知道有几个数据库了
for(String name : mDatabaseDir.list()) { //这里就拿到了所有数据库的名字 传给web展示即可}
拿到名字以后 即可拿到我们的database对象了。
mDatabase = mContext.openOrCreateDatabase(name, 0, null);
拿到database对象以后再做其他的crud操作 无非就是接收一下web传来的参数然后执行sql语句而已。
@Override public Response serve(IHTTPSession session) { String uri = session.getUri(); Response response = getStaticFileResponse("/sqliteonweb", session); if (response != null) { return response; } if (uri.equals("/")) { return getStaticFileResponse("sqliteonweb/index.html"); } // Open database else if (uri.equals("/open")) { return getOpenResponse(session); } else if (uri.equals("/execSQL")) { return getExecSQLResponse(session); } else if (uri.equals("/listDB")) { return getListDBResponse(session); } return getNotFoundResponse(); }
- sp的部分 就留给大家自己思考了,其实差距不大,主要功夫还是在写前端页面部分