2014-08-30 2 views
1

не удается получить базу данных, и показывает предупреждение пуха, который говорит:SQLite жёстко базы данных/данные/DB_PATH андроида

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

Пытался в поисках связанных ошибок, но ничего не помогает. Вот код

private static String DB_PATH = "/data/data/mlearning.fundprog/databases/"; 
private static String DB_NAME = "questionsDb"; 
private SQLiteDatabase myDataBase; 
private final Context myContext; 

public DBHelper(Context context) { 
    super(context, DB_NAME, null, 1); 
    this.myContext = context; 
    DB_PATH = context.getFilesDir().getPath() + context.getPackageName() + DB_NAME; 
} 

private boolean checkDataBase(){ 
    SQLiteDatabase checkDB = null; 
    try{ 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
    }catch(SQLiteException e){ 

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

    return checkDB != null ? true : false; 
} 

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

public void openDataBase() throws SQLException{ 
    String myPath = DB_PATH + DB_NAME; 
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
} 

Я действительно не получить то, что случилось с этим. Он работал раньше, но я думаю, что это потому, что я перешел в API 14 из API 8. Я думаю, что этот более высокий API имеет другое правило для кодировок. Это так?

+0

Вы фактически используете 'DB_PATH' где угодно? –

+0

Да, я использую 'DB_PATH' всюду @CL. –

+0

Не в коде, который вы указали. (Конструктор 'SQLiteOpenHelper' видит только' DB_NAME'.) –

ответ

1

Вы можете использовать любой из следующих 2 способов получить путь базы данных:

  • DB_PATH = "/data/data/" + context.getApplicationContext().getPackageName() + "/databases";


или использовать этот

  • DB_PATH = context.getDatabasePath(DB_NAME).getParent();
+0

Что означает 'v' в' v.getDatabasePath'? –

+0

Контекстный объект! Я обновил свой ответ –

+0

Это должно быть расположено внутри конструктора DBHelper? Я пробовал и все еще не работает –

Смежные вопросы