。如何将文件从项目资产文件夹复制到android studio中的设备数据文件夹?

时间:2019-12-15 11:14:05

标签: android sqlite file-copying android-assets

我正在尝试使用SQLiteAssetHelper,这需要我在PC上创建数据库并将其复制到assets/databases/databasename.db。我这样做了,但是当我检查设备时,我的应用程序的数据文件夹下也没有数据库,也没有数据库文件夹。

我是根据视频制作的,在那里的那个人没有做任何其他事情来使复制工作正常进行。

那么,是否应该将文件自动复制到设备上? 如果没有,我该如何复制文件?

2 个答案:

答案 0 :(得分:1)

  

那么,是否应该将文件自动复制到设备上?如果没有,我该如何复制文件?

是的,只有在尝试访问数据库时才会执行。仅实例化扩展SQLiteAssetHelper的类将不会复制数据库,因此,如果仅此操作,数据库将是不可见的。

使用SQliteAssetHelper采取的步骤应为:-

  1. 创建您的项目。
  2. 修改build.gradle,在相关性部分添加implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
  3. 创建资产文件夹,然后创建资产文件夹中的数据库文件夹,并
  4. 将数据库文件复制到数据库文件夹中。
  5. 创建扩展SQliteAssetHelper的Database Helper类。
  6. 实例化数据库助手
  7. 访问数据库(这是复制数据库的时间)。

如果您在执行第5步时作为示例(基于问题中的信息):-

public class DatabaseHelper extends SQLiteAssetHelper {

    public static final String DATABASENAME = "databasename.db"; //<<<<<<<<< MUST match file name in assets/databases
    public static final int DATABASEVERSION = 1;

    public DatabaseHelper(Context context) {
        super(context, DATABASENAME, null, DATABASEVERSION);
        this.getWritableDatabase(); //<<<<< will force database access and thus copy database from assets
    }
}

然后在执行6(实例化数据库助手)时,由于this.getWritableDatabase();访问(隐式打开)数据库,所以完成了7。

例如

public class MainActivity extends AppCompatActivity {

    DatabaseHelper mDBHelper; //<<<<< declares the database helper

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDBHelper = new DatabaseHelper(this); // instantiates the database helper
    }
}

答案 1 :(得分:0)

您要说明的过程需要对设备上的应用程序存储进行root访问,出于安全考虑,在普通的非rooted设备上是不可能的。为此,您需要一个植根设备 OR ,您可以在 Android Studio 中使用模拟器,这种方法更加简单易用:

Android Studio -> 设置-> 内存-> 内部存储-> 其他

将打开一个弹出窗口。点击浏览。您将可以访问应用程序的内部存储,因此也可以管理数据库文件夹。

PS:另外,您可以将应用程序与您拥有的数据库表打包在一起,就像处理其他文件一样,只需将其放在src/main/assets文件夹下,即可从运行。此线程中提供了代码示例:Android - Copy assets to internal storage(由@Ezaldeen sahb建议)