Advertencia: No codifique "/ data /"; Utilice Context.getFilesDir (). GetPath () en su lugar

He desarrollado 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 da advertencia:

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

Busqué en google y encontré la respuesta en cuanto a uso:

 Context.getFilesDir().getPath(); 

Y la codificación difícil 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; 

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, sugerirme la forma de cómo resolver la advertencia.

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

Puede obtener la ruta de la base de datos con context.getDatabasePath (); Usted pasa el nombre deseado al archivo (no importa si existe o no). En su caso "exampledb.sqlite"

Por lo que su código será:

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

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

Haga 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.

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

 Context c = getApplicationContext(); c.getFilesDir().getPath(); 
  • El manejo de la base de datos dejó de funcionar en Android 2.2.1 (Desire HD 1.72.405.3)
  • Encriptación y bloqueo de bases de datos Android
  • Exención de SQLite sobre la reanudación de la actividad de Android
  • Rendimiento de SQLite de Android en consultas complejas
  • Patrón de diseño recomendado para escribir en la base de datos SQLite en Android
  • SQLiteException no se captura
  • ¿Cuál es el tamaño máximo de la base de datos SQLite en Android?
  • Cómo ocultar filas específicas de un cursor en android
  • SQLiteOpenHelper onCreate no crea base de datos - o se está sobrescribiendo inmediatamente
  • Obtener la distancia más corta desde un punto
  • ¿Dónde deben llamar las aplicaciones de Android a SQLite getWritableDatabase?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.