У меня работает DataBaseHelper, но я пытаюсь понять предупреждения, которые я подавил - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть работающий DataBaseHelper, в котором я подавил два предупреждения и проигнорировал одно предложение. Полное приложение работает хорошо, но иногда я получаю уведомления об ошибках. Трассировки стека почти всегда указывают на ошибки, связанные с базой данных, и обычно после обновления версии d / b. При чистой установке проблем не возникает.

Игнорируемое предложение заключается в том, что "/ data / data /" выделено в строке:
DB_PATH = "/ data / data /" + context.getPackageName () + "/ database /";

Несмотря на то, что никакой сигнализации не возникает, если заменить на: DB_PATH = myContext.getFilesDir (). GetPath (); приложение не находит детали базы данных при запуске. (Примечание. Программное обеспечение предлагает Context.getFilesDir (), а не myContext.getFilesDir () ', но это тоже не работает.

Метод работы с двумя скрытыми предупреждениями показан в четырех строках, помеченных ~~~~.

Буду признателен за любые предложения по улучшению.

class DatabaseHelper extends SQLiteOpenHelper {

    private static final int DB_VERSION = 21;
    private String DB_PATH;
    private static String DB_NAME = "My_Database.sqlite3";
    private SQLiteDatabase myDataBase;
    private final Context myContext;


    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        myContext = context;
        DB_PATH = "/data/data/" + context.getPackageName() + "/databases/"; 

     }


~~~~  @SuppressWarnings("RedundantThrows")  ~~~~    

    void createDataBase() throws IOException {
        boolean dbExist = checkDatabase();

~~~~  //noinspection StatementWithEmptyBody  ~~~~ 

        if (dbExist) {

        } else {
            getReadableDatabase();
            close();
            try {
                copyDataBase();
            } catch (IOException e) {
                throw new IOException(e);
            }
        }

    }

~~~~  @SuppressWarnings("EmptyCatchBlock")  ~~~~  

    private boolean checkDatabase() {
        SQLiteDatabase checkDB = null;

~~~~        //noinspection EmptyCatchBlock  ~~~~

        String myPath = DB_PATH + DB_NAME;

        try {

            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

        } catch (SQLiteException e) {

        }
        if (checkDB != null) {
            checkDB.close();
        }

        return checkDB != null;

    }


    private void copyDataBase() throws IOException {
        InputStream myInput = myContext.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_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();
    }




    void openDatabase() throws SQLiteException {
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

    }

    @Override
    public synchronized void close() {
        if (myDataBase != null)
            myDataBase.close();
        super.close();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }


    @Override
    public void onUpgrade(SQLiteDatabase myDataBase, int oldVersion, int newVersion) {

        if (newVersion > oldVersion)

            try {

                copyDataBase();

            } catch (IOException e) {
                e.printStackTrace();
            }

    }

}
...