Предупреждение. Не печатайте «/ data /»; Вместо этого используйте Context.getFilesDir (). GetPath ()

Я разработал приложение, в котором я скопировал базу данных из папки с ресурсами на мой путь, который жестко закодирован. Поэтому затмение дает мне предупреждение:

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

Я искал в google и нашел ответ на использование:

 Context.getFilesDir().getPath(); 

И жесткое кодирование не работает на каждом устройстве, на некоторых это может привести к ошибке или не работать должным образом. Но, реализуя вышеизложенное, я получаю ошибку.

Мой код выглядит следующим образом:

 private final Context myContext; 

Получение предупреждения здесь

 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) {} 

Пожалуйста, предложите мне способ разрешения предупреждения.

Solutions Collecting From Web of "Предупреждение. Не печатайте «/ data /»; Вместо этого используйте Context.getFilesDir (). GetPath ()"

Кончик, который дает вам затмение, недостаточно хорош.

Вы можете получить путь к базе данных с context.getDatabasePath (); Вы передаете искомое имя в файл (независимо от того, существует он или нет). В вашем случае "exampledb.sqlite"

Поэтому ваш код будет:

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

Конечно, myContext должен быть текущим контекстом. Это, то есть текущая активность или служба, вызывающая это.

Сделайте следующее:

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

Вы не получите ошибку или предупреждение.

Просто используйте контекст активности / приложения для получения пути:

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