Я работаю над проектом, который делает нечто подобное. Я запрашиваю обновления базы данных и, в зависимости от объема необходимых обновлений, отправляет либо совершенно новую базу данных, либо серию операторов SQL. Я настоятельно рекомендую хранить базы данных на SD-карте, если она доступна, особенно если размер загружаемых баз данных варьируется и превышает несколько килобайт.
Я делаю следующее, чтобы получить файл (измените по вкусу, так как у вас может быть XML для ответа в SOAP-ответе, также игнорируйте прогресс).
fileStream = new FileOutputStream(new File(I-build-my-filename-stuff-above-here));
/* fileData is a byte[8192] */
while((i = httpResponse.read(fileData)) > -1) {
fileStream.write(fileData, 0, i);
position += i;
if (item.getUpdateType() == UpdateItem.FULL_FILE) {
progress = position / item.getSize();
} else {
progress = position / (item.getSize() * 2);
}
item.setProgress(progress);
} // end loop through getting http response stream
fileStream.close();
httpResponse.close();
Затем я делаю следующее для доступа к базе данных. Поскольку эти базы данных также используются в приложении для iPhone, они не имеют таблицы для Android, поэтому для доступа к БД необходим флаг SQLiteDatabase.NO_LOCALIZED_COLLATORS
. Обратите внимание, что мой класс Database расширяет класс SQLiteOpenHelper:
public Database(Context context, String fileName, String title) {
super(context, fileName, null, 1);
this.context = context;
this.title = title;
this.fileName = fileName;
if (fileName != null && fileName.contains("/sdcard")) {
db = SQLiteDatabase.openDatabase(fileName, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
} else {
db = getWritableDatabase();
}
}