.如何在android studio中将文件从项目资产文件夹复制到设备数据文件夹?
我正在尝试使用.如何在android studio中将文件从项目资产文件夹复制到设备数据文件夹?,android,sqlite,file-copying,android-assets,Android,Sqlite,File Copying,Android Assets,我正在尝试使用SQLiteAssetHelper,它要求我在PC上创建数据库并将其复制到assets/databases/databasename.db。我会这样做,但当我检查设备时,数据库和数据库文件夹都不在我应用程序的数据文件夹下 我是根据一段视频做的,而那个家伙没有做任何其他事情来复制 那么,这些文件应该自动复制到设备上吗? 如果没有,我如何复制文件?您正在解释的过程需要root用户访问设备上的应用程序存储,而出于安全考虑,在正常的非root设备上,这是不可能的。为此,您需要一个根设备或您
SQLiteAssetHelper
,它要求我在PC上创建数据库并将其复制到assets/databases/databasename.db
。我会这样做,但当我检查设备时,数据库和数据库文件夹都不在我应用程序的数据文件夹下
我是根据一段视频做的,而那个家伙没有做任何其他事情来复制
那么,这些文件应该自动复制到设备上吗?
如果没有,我如何复制文件?您正在解释的过程需要root用户访问设备上的应用程序存储,而出于安全考虑,在正常的非root设备上,这是不可能的。为此,您需要一个根设备或您可以在Android Studio中使用emulator,这是一种更简单、用户友好的方法: 从Android Studio打开emulator->设置->内存->内部存储->其他 将打开一个弹出窗口。单击浏览。您将可以访问应用程序的内部存储,以便管理数据库文件夹 p.S.:此外,您可能只需将您的应用程序与您拥有的数据库表打包,就像其他任何文件一样,只需将其放在您的
src/main/assets
文件夹下,并在运行时从代码访问即可。此线程中提供了代码示例:(由@Ezaldeen sahb建议)
那么,这些文件应该自动复制到设备上吗?如果没有,我如何复制文件
是的,但只有在尝试访问数据库时才会这样做。仅实例化扩展SQLiteAssetHelper的类不会复制数据库,因此,如果这就是您所做的全部,那么数据库将不可见
使用SQliteAssetHelper时应执行以下步骤:-
实现'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
包含在依赖项部分看到了吗?我知道了,但这不是我想要的,我想从android project asseets folderon pc上获取文件,复制到手机上的数据文件夹。这就是我试图解释的,我确实将数据库文件放在了src/main/assets下。我使用的库SQLiteAssetHelper应该在data/data/my.package.name/databases/mydatabase.db下找到该文件。事实是,该文件不在那里。我使用emulator,并在工具->查看窗口->设备文件资源管理器中查看它。数据库文件夹根本不在那里,谢谢!我做了你描述的一切。你的答案是完美的,然而,我的问题不是我所想的。我只是不小心在SQLiteAssetThelper构造函数中传递了空指针。
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
}
}
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
}
}