我正在尝试使用SQLiteAssetHelper
,它要求我在PC上创建数据库并将其复制到assets/databases/databasename.db
。我这样做了,但是当我检查设备时,我的应用程序的数据文件夹下也没有数据库,也没有数据库文件夹。
我是根据视频制作的,那里的人没有做任何其他事情来使复制工作正常进行。
因此,是否应该将文件自动复制到设备上?如果没有,如何复制文件?
因此,是否应该将文件自动复制到设备上?如果没有,如何复制文件?
是的,只有在尝试访问数据库时,它才会BUT。仅实例化扩展SQLiteAssetHelper的类将不会复制数据库,因此,如果仅此操作,数据库将不可见。
使用SQliteAssetHelper采取的步骤应为:-
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
。如果使用第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
}
}
您正在解释的过程要求对设备上的应用程序存储具有root访问权限,出于安全考虑,在普通非rooted设备上是不可能的。为此,您需要一个有根的设备OR