Вы, безусловно, можете разделить одну базу данных между двумя приложениями.
. Чтобы обмениваться данными между приложениями (при условии, что они выпущены одним и тем же издателем), вам нужно будет указать общий идентификатор пользователя в AndroidManifest .xml обоих приложений.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="my.app" ... >
(Это недокументировано, но общий идентификатор пользователя должен быть строкой с хотя бы одним разделителем точек).
Остальное легко, и вам не нужно беспорядок вокруг пути базы данных. Просто используйте тот же DBAdapter в обоих приложениях. В приложении, которое размещает базу данных, вызовите DBAdapter с родным контекстом.
DBadapter hostDBAdapter = new DbAdapter(getApplicationContext());
performerDBadapter.open();
Во втором приложении доступ к базе данных с контекстом приложения для размещения базы данных. Сначала определите общий контекст:
Context sharedContext = null;
try {
sharedContext = this.createPackageContext("replace.with.host.package.name", Context.CONTEXT_INCLUDE_CODE);
if (sharedContext == null) {
return;
}
} catch (Exception e) {
String error = e.getMessage();
return;
}
Затем откройте DBAdapter с общим контекстом:
DbAdapter sharedDBadapter = new PerformerDbAdapter(sharedContext);
sharedDBadapter.open();
В качестве окончательной заметки, если ваша база данных существует до установки общего идентификатор пользователя в манифесте, вам нужно будет удалить / переустановить приложения на физическом устройстве, чтобы вы не заблокировали себя из своей базы данных (sqlite error 14). С другой стороны, эмулятор может оказаться более прощающим. Итог, если ваши приложения опубликованы на рынке Android, установка общего идентификатора пользователя в запоздалой мысли не будет работать.
Надеюсь, это поможет.
Вам просто нужен цикл для проверки ... Примерно так:
foreach(var column in t.Columns.Cast<DataColumn>().ToArray()) {
if (t.AsEnumerable().All(dr => dr.IsNull(column)))
t.Columns.Remove(column);
}
Кредиты: здесь