Я использую приведенный ниже код для загрузки уже загруженного файла db sqlite с диска Google в папку data/data/packagename/databases, но когда метод завершается, я вижу предупреждающее сообщение о повреждении db, зарегистрированное в logcat, а также все данные на устройстве для приложения перезаписываются и отображаются пустым при открытии приложения.Google Диск Android api - Загрузка файла db с диска
mfile = Drive.DriveApi.getFile(mGoogleApiClient, mResultsAdapter.getItem(0).getDriveId());
mfile.openContents(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);
--mfile is an instance of DriveFile
final private ResultCallback<ContentsResult> contentsOpenedCallback = new ResultCallback<ContentsResult>()
{
@Override
public void onResult(ContentsResult result)
{
if (!result.getStatus().isSuccess())
{
FileUtils.appendLog(getApplicationContext(), Tag + "-onResult", "Error opening file");
return;
}
try
{
if (GetFileFromDrive(result))
{
//FileUtils.Restore(getApplicationContext());
SharedPrefHelper.EditSharedPreference(getApplicationContext(), Constants.PREFS_DO_RESTORE, false);
}
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
private boolean GetFileFromDrive(ContentsResult result)
{
Contents contents = result.getContents();
//InputStreamReader rda = new InputStreamReader(contents.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream()));
FileOutputStream outStream;
String currLine;
boolean restoreSuccess = false;
File sourceDbFile = BackupDBBeforeDeletion();
if(sourceDbFile != null)
sourceDbFile.delete();
try
{
outStream = new FileOutputStream(getApplicationContext().getDatabasePath(Constants.DB_NAME));
while ((currLine = reader.readLine()) != null)
{
outStream.write(currLine.getBytes());
}
outStream.flush();
reader.close();
outStream.close();
restoreSuccess = true;
}
catch (FileNotFoundException e)
{
// TODO: Log exception
}
catch (IOException e)
{
// TODO: Log Exception
}
return restoreSuccess;
}
Когда метод GetFileFromDrive завершается, БД коррупция проявляется на LogCat и все имеющиеся данные о приложении datanase файла (БД SQLite) ушли.
Пожалуйста, помогите, так как я убедился, что загруженный файл SQL-файла загружен правильно и хорошо сформирован, загрузив его и открыв в Sqlite Browser. Это загрузка с диска, которая не работает.
Попробуйте записать файл в локальный файл первый (не путь DB-файл) и убедитесь, что не поврежден. Затем скопируйте файл на место. Возможно, SQLite развращает его - он пытается быть прочитанным/записанным во время написания файла. Просто мысль. – Randy
Да, это часть моей проблемы, так как когда я пытался делать именно то, что вы предложили, файл db, сформированный на этом другом пути, но ** db был пустым **, хотя я знаю, что там есть данные версия привода. –