Предупреждение. Не печатайте «/ 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) {} 

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

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

Вы можете получить путь к базе данных с 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(); 
Intereting Posts
React-Native: загрузка и загрузка файлов с веб-сайта android Как создать частично округленные углы-прямоугольники с возможностью центровки и без создания нового растрового изображения? Непрерывное обновление местоположения в фоновом режиме Метод onClick в фрагменте никогда не вызван Создайте несколько файлов apk с одной сборкой проекта в Android Studio Не удалось вызвать методы адаптера RecyclerView Запуск WebView в фоновом режиме Как проверить, существует ли файл SharedPreferences Android Espresso onData с doesNotExist Как использовать инструмент для создания Facebook Buck с Android Studio? Что такое com.sec.android.provider. * Приложения точно? NPE на Facebook SDK 4.10: попытка вызвать метод интерфейса «java.lang.Object com.facebook.inject.Lazy.get ()» в ссылке на нулевой объект Android Cookies для IP-адреса Android – анимация масштабирования с использованием AnimatorSet Android-программирование – Опубликовать Google Form / Spreedsheet (НЕОБХОДИМЫЕ ПОЛЯ)