Intereting Posts
Как читать определенный столбец из существующей SQLiteBatabase в Android? После поворота линейного выхода события onclick не меняют положение после вращения Android Overlaying images в списке слоев Является ли официальное руководство разработчиков фрагментов противоречивым? Бесплатная библиотека диаграмм для создания линий, бара (сложена и сгруппирована) и объединена в Android Периодические запросы HTTP с использованием RxJava и дооснащения Предупреждение о недоставке в неградусном проекте Android Studio 0.4.5 Различные tabMode для TabLayout Android Studio Для каждого макроса Пользовательский адаптер курсора, вызывающий bindView несколько раз SwipeRefreshLayout обнаруживает прокрутку вниз до начала onRefresh () start Получать высоту и ширину макета программно Как разделить неонные свойства на число с плавающей точкой Курс просмотра поиска в Android не отображается как один цвет панели инструментов SQLiteDatabase.insertOrThrow не бросает, но не вставлены данные

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