в андроид данных / данных / ..... получаю только половину базы данных - PullRequest
0 голосов
/ 07 марта 2012

Я создал базу данных для приложения Android и ее размер составляет 30 КБ. Я поместил эту базу данных в папку ресурсов и использовал приведенный ниже код для ее вставки в data/data/........ я получаю только 1/3 своей базы данных после запуска на эмуляторе. Кто-нибудь сталкивался с этой проблемой ранее.

// введите код здесь

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

    } catch (SQLiteException e) {
        // database does't exist yet.
        Log.i("database", "NOT EXIST");
    }
    if (checkDB != null) {
        checkDB.close();
    }
    return checkDB != null ? true : false;
}

private void copyDataBase()  
{
    FileInputStream myInput = null;
    String outFileName;
    FileOutputStream myOutput = null;
        try{
        // Open your local db as the input stream
        //InputStream myInput = myContext.getResources().openRawResource(R.drawable.menu);
        myInput = (FileInputStream) myContext.getAssets().open(DB_NAME);
        // Path to the just created empty db
        outFileName = DB_PATH + DB_NAME;
        // Open the empty db as the output stream
        myOutput = new FileOutputStream(outFileName);
        // transfer bytes from the inputfile to the outputfile
        try{
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }
        }catch (Exception e) {
            Log.i("catch ", "Ecxeption"+e.getMessage());
            // TODO: handle exception
        }
    }catch (Exception e) {
        // TODO: handle exception
    }finally{
        try{
            // Close the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();
        }
        catch (Exception e2) {
            // TODO: handle exception
        }
    }
}

когда я запускаю этот код в эмуляторе, тогда я нашел свою базу данных в data / data / ....... но я нашел только 7 КБ базы данных. пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 07 марта 2012

Как насчет изменения

      while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
      }

на

      while ((length = myInput.read(buffer)) != -1) {
        myOutput.write(buffer, 0, length);
      }

Я не думаю, что поток завершен, пока не достигнет -1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...