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();