打算做一个离线的app,数据从android中sqlite查询,如果是普通的android项目也就到此为止了,可这个项目使用的是h5的页面+mui,app只是个壳子,想着使用mui通过js调用android的方法,然后android使用sqlite去执行查询操作返回json,一路坎坷,心酸泪就不说了,记录下这个的成果,以备以后使用!
mui中的manifest.json中配置自己需要方法
"permissions": { "sso":{ "description": "sso" } }
android中java下自己的包中新建一个类继承StandardFeature(此类是5+sdk的东西,需要引用SDK)
public class Sso extends StandardFeature
我遇到的问题,是怎么在一个类中操作sqlite,我百度了一大把操作sqlite的文档,都是让见一个dbHelper的类去操作
其中的构造方法的Context我不明白我该从这个类中传什么过去。于是百度...
终于搜到了一个
getApplicationContext()
然后我想着通过这个去获取raw下的资源然后放到本地的存储卡上,
定义要存储的位置及数据库的名称
private final String DATABASE_PATH = android.os.Environment .getExternalStorageDirectory().getAbsolutePath() + "/dictionary"; private final String DATABASE_FILENAME = "dm.db";
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME; File dir = new File(DATABASE_PATH); // 如果/sdcard/dictionary目录中存在,创建这个目录 if (!dir.exists()) dir.mkdir(); // 如果在/sdcard/dictionary目录中不存在 // dictionary.db文件,则从res\raw目录中复制这个文件到 // SD卡的目录(/sdcard/dictionary) if (!(new File(databaseFilename)).exists()) { // 获得封装dictionary.db文件的InputStream对象 InputStream is = getApplicationContext().getResources().openRawResource(R.raw.dm); FileOutputStream fos = new FileOutputStream(databaseFilename); byte[] buffer = new byte[8192]; int count = 0; // 开始复制dictionary.db文件 while ((count = is.read(buffer)) > 0) { fos.write(buffer, 0, count); } fos.close(); is.close(); } // 这里写你的业务逻辑即可 SQLiteDatabase db = openOrCreateDatabase(databaseFilename, null);
查询 Cursor c = db.rawQuery("select * from dmb where", null)
if (c != null) { while (c.moveToNext()) { //遍历 } c.close(); db.close(); }
返回数据即可 return JSUtil.wrapJsVar(jsonArray.toString());