PC通过数据线读取android数据库(二) 安卓端开发

     基于上一篇采用adb工具连接安卓的思路下,这一篇我们开始做安卓方面的数据准备。

     因为我们要做的是Pc读取安卓的数据库,没有数据库可不行嘞,所以,让我们现在安卓应用上创建一个数据库。这里数据库的ORM框架我选择的是郭霖大神开发的SqLite 2.0框架,谁让我看他的第一行代码长大呢。创建了一个用户模型,如下:

public class UserModel extends LitePalSupport {

    private int id;

    private String username;

    private String password;

    private String email;

    //..... 相关set get方法

}

     接下来向数据库中添加数据,在UserAddActivity中录入人员数据并将人员保存至数据库

    if (ValidForAdd()) {
                    UserModel userModel=new UserModel();
                    userModel.setUsername(et_username.getText().toString());
                    userModel.setPassword(et_password.getText().toString());
                    userModel.setEmail(et_email.getText().toString());
                    userModel.save();

                    finish();
    }

    下来,是真的到重点了,作为安卓开发者来说,我们都知道我们应用的数据库文件,都会保存在“/data/data/你项目的包/database”目录下,文件名为xxx.db文件,但由于安卓安全机制的影响下,我们是不可以直接访问到这个文件的,所以我们需要把这个db文件拷贝的其他人可以访问的共有目录下(这算不算android的一个漏洞,不过应该也不会有人把自己的数据这么搞),通过下面的代码完成将db文件拷贝一份放在共有目录下:

 public boolean copyDbToPublicDirectory() {
        boolean success = false;
        try {
            //获取db文件
            String dbDirPath = "/data/data/" + packageName
                    + "/databases/";

            File dir = new File(dbDirPath);
            if (dir.exists() && dir.isDirectory()) {
                File[] files = dir.listFiles();
                if (files != null && files.length > 0) {
                    for (File file : files) {
                        if (file.getName().endsWith("db")) {


                            //拷贝文件方式
                            Log.i("hf", "获取到数据库文件" + file.getName());
                            //拷贝这个文件到外部共享文档文件夹下
                            File documentDir = Environment.getExternalStorageDirectory();
                            Log.i("hf", "获取到SDka" + documentDir.getAbsolutePath());
                            String saveDir = documentDir.getAbsolutePath() + "/" + packageName + "/" + "dbfiles";
                            File f_saveDir = new File(saveDir);
                            if (!f_saveDir.exists()) {
                                f_saveDir.mkdirs();
                            }
                            String saveFile = saveDir + "/" + file.getName();
                            Log.i("hf", "拷贝文件的路径:" + saveFile);
                            File f_saveFile = new File(saveFile);
                            if (!f_saveFile.exists()) {
                                f_saveFile.createNewFile();
                            }
                            //拷贝文件
                            Log.i("hf", "开始拷贝文件");
                            FileUtils.copyFileUsingFileChannels(file, f_saveFile);
                            Log.i("hf", "拷贝文件成功");
                        }
                    }
                    success = true;
                }

            }
        } catch (Exception ex) {
            Log.e("hf", ex.getMessage());
        }
        return success;
    }

    拷贝的时候,注意安卓6.0的权限问题哦,至此,我们安卓端的准备工作就做好了,让我们看一下动态图欣赏一下吧。

演示gif

     下一篇,终于到了pc端的开发了,休息下,再努力下!!

你可能感兴趣的:(C#读取Android数据,C#操作Adb)