Obtener el directorio de bases de datos de mi aplicación mediante programación

Quiero usar una base de datos "precargada" en mi aplicación. Hay un montón de preguntas sobre esto y la mayoría apuntan a este artículo de blog aquí o similares.

Hasta aquí todo bien. Sólo quiero saber si hay una mejor manera de obtener el directorio de bases de datos por defecto para que no tenga que usar algo como esto:

private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/"; 

Quiero decir, tal vez eso se cambió en el futuro o tal vez un dispositivo o rom podría colocarlo en otro lugar … así que hay una manera de obtener esta vía de programación?

En Contexto existe un método para getDatabasePath (nombre), pero necesitas darle un nombre db existente y así … no existe todavía, quiero moverlo allí: P

Crear un DB vacío, obtener la ruta con getDatabasePath() , a continuación, sobrescribirlo con el suyo propio.

Solía…

 String destPath = getFilesDir().getPath(); destPath = destPath.substring(0, destPath.lastIndexOf("/")) + "/databases"; 

Utilizado por SQLiteAssetHelper:

  String path = mContext.getDatabasePath(mName).getPath(); 

En este momento, la base de datos no existe. Creo que la cadena sólo toma la ruta interna y agrega los modificadores adecuados. De hecho, esto parece funcionar bien:

 context.getDatabasePath("a").getParentFile() 

Básicamente, no es necesario tener una base de datos real creada, sólo pide una.

Puede utilizar el método getFilesDir() o getDatabasePath en una Activity-Class para obtener esta carpeta.
Más información aquí

Puede utilizar el método getDatabasePath en su clase Helper:

 public class MyDatabase extends SQLiteAssetHelper { private static final String DATABASE_NAME = "wl.db"; private static final int DATABASE_VERSION = 1; public String databasePath = ""; public MyDatabase(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // you can use an alternate constructor to specify a database location // (such as a folder on the sd card) // you must ensure that this folder is available and you have permission // to write to it // super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION); databasePath = context.getDatabasePath("wl.db").getPath(); } 
  • ¿Cuál es la mejor manera de implementar relaciones muchos-a-muchos usando ORMLite?
  • Cómo almacenar el arraylist en la base de datos ormlite
  • ¿Cómo manipular los datos del cursor antes de mostrarlo en un ListView (usando un cargador)?
  • Android - Firebase Offline Mejores Prácticas
  • Probar la base de datos en Android: ProviderTestCase2 o RenamingDelegatingContext?
  • Tabla de SQLite con columnas de columna de enteros
  • SQLiteOpenHelper onUpgrade () Confusión Android
  • ¿Cómo utilizar mi propia base de datos sqlite?
  • SQlite Database: No se puede encontrar el contexto
  • ¿Cifrar la base de datos SQLite sin aumentar el tamaño de la aplicación?
  • Cómo representar datos anidados en la clase Firebase
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.