usuario tutorial studio parte funciona formulario example espaƱol ejemplo datos create crear con como android database sqlite warnings android-sqlite

android - tutorial - Advertencia: No codifique "/ data/"; use Context.getFilesDir(). getPath() en su lugar



sqlite android ejemplo (3)

Haz lo siguiente:

public DataBaseHelperClass(Context context) { super(context, DATABASE_NAME, null ,DATABASE_VERSION); this.myContext = context; //The Android''s default system path of your application database. DB_PATH = myContext.getDatabasePath(DATABASE_NAME).getPath(); }

No obtendrá error o advertencia.

Desarrollé una aplicación en la que copié la base de datos de la carpeta de activos a mi ruta, que está codificada. Así que Eclipse me advierte:

Do not hardcode "/data/"; use Context.getFilesDir().getPath() instead

Busqué en google y encontré la respuesta para usar:

Context.getFilesDir().getPath();

Y la codificación rígida no funciona en todos los dispositivos, en algunos puede dar un error o no funcionar correctamente. Pero al implementar lo anterior estoy recibiendo error.

Mi código es el siguiente:

private final Context myContext;

Recibiendo advertencia aquí

private static String DB_PATH = "/data/data/com.example.abc/databases/"; private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "exampledb.sqlite"; static SQLiteDatabase sqliteDataBase; public DataBaseHelperClass(Context context) { super(context, DATABASE_NAME, null ,DATABASE_VERSION); this.myContext = context; } public void createDataBase() throws IOException{ boolean databaseExist = checkDataBase(); if(databaseExist){ this.getWritableDatabase(); }else{ this.getReadableDatabase(); copyDataBase(); } } public boolean checkDataBase(){ File databaseFile = new File(DB_PATH + DATABASE_NAME); return databaseFile.exists(); } private void copyDataBase() throws IOException{ InputStream myInput = myContext.getAssets().open(DATABASE_NAME); String outFileName = DB_PATH + DATABASE_NAME; OutputStream myOutput = new FileOutputStream(outFileName); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException{ String myPath = DB_PATH + DATABASE_NAME; sqliteDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); } @Override public synchronized void close() { if(sqliteDataBase != null) sqliteDataBase.close(); super.close(); } public Cursor myFunction(){ } @Override public void onCreate(SQLiteDatabase db) {} @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

Por favor, sugiéreme la forma de resolver la advertencia.


La punta que te da el eclipse no es lo suficientemente buena.

Puede obtener la ruta de la base de datos con context.getDatabasePath(); Debe pasar el nombre deseado al archivo (sin importar si existe o no), en su caso exampledb.sqlite

Entonces tu código será:

File outFile =myContext.getDatabasePath(DATABASE_NAME); String outFileName =outFile.getPath() ;

por supuesto, myContext tiene que ser el contexto actual. Esto es, por ejemplo, la actividad en ejecución o el servicio que está llamando a esto.


Solo usa el contexto de la actividad / aplicación para obtener la ruta como:

Context c = getApplicationContext(); c.getFilesDir().getPath();