2013-10-04 3 views
2

Я пытаюсь синхронизировать данные между вебом-сервером и андроидом app.So, я отслеживаю этой большой совет: Sync data between Android App and webserverSQLiteOpenHelper, Кратные Столы и ContentProvider

Теперь, я на самом деле работаю в первой части делая контент-провайдера. Для этого я нашел этот учебник: http://www.vogella.com/articles/AndroidSQLite/article.html

И в этом учебном пособии они предлагают сделать один SQLiteOpenHelper для каждой таблицы. Он работал хорошо для меня, но я понял, что это было немного странно, потому что я буду иметь один файл для каждой таблицы

Как это:

public class AppUserDatabaseHelper extends SQLiteOpenHelper { 

private static final String DATABASE_NAME = "appusertable.db"; 
private static final int DATABASE_VERSION = 1; 

public AppUserDatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

// Method is called during creation of the database 
@Override 
public void onCreate(SQLiteDatabase database) { 
    AppUserTable.onCreate(database); 
} 
} 

Итак, я начал делать некоторые исследования и Я узнал об этом: Should there be one SQLiteOpenHelper for each table in the database? и эта ссылка в частности: http://blog.foxxtrot.net/2009/01/a-sqliteopenhelper-is-not-a-sqlitetablehelper.html, и это имеет для меня большой смысл.

Ну, моя проблема заключается в том, что на самом деле это также делает большой смысл иметь один ContentProvider для каждой таблицы, потому что, если я этого не сделаю, это будет огромным и очень запутанным, но в каждом ContentProvider есть место, где я на самом деле создание базы данных:

public class AppUserContentProvider extends ContentProvider {  
@Override 
public boolean onCreate() { 
    database = new AppUserDatabaseHelper(getContext()); 
    return false; 
} 
} 

И это также дает мне доступ к базе данных.

Так что мой вопрос: Я просто должен сделать гигантский ContentProvider для всех таблиц? или существует другой способ создания базы данных, которая должна быть разделена между каждым ContentProvider?

Я надеюсь, что вы можете помочь мне Спасибо советов

+0

Мне интересно, почему это предполагает наличие одного 'SQLiteOpenHelper' за таблицу. Как выполнить запрос, когда вам нужно присоединиться, скажем, две или три таблицы? –

+0

Мне было интересно то же самое. Я думаю, что большинство веб-уроков или примеров как-то бесполезны, когда вы должны что-то делать по-настоящему. Практически невозможно иметь приложение с одним столом, и это не так, как вы должны повторить все, чтобы его решить. – ginobilicl

+0

Я думаю, что это [сообщение] [1] поможет вам. [1]: http://stackoverflow.com/questions/13877701/sqliteopenhelper-one-for-each-table-in-database – telmo

ответ

0

Вы должны иметь другой поставщик контента на ресурс, но использовать один sqlliteopenhelper (1) базы данных.

Есть несколько способов сделать это. Что я делаю (что может и не быть лучшим), он использует собственный объект приложения в моем приложении (http://developer.android.com/reference/android/app/Application.html), который имеет методы для доступа к объектам, которые я хочу быть синглом, которые также нуждаются в контексте. Это может быть не лучший способ, но он работает для меня.

например.

public class MainApplication extends Application { 
    public static DatabaseHelper databaseHelper; 
    public static Context applicationContext; 


    @Override 
    public void onCreate() { 
     super.onCreate(); 
     databaseHelper = new DatabaseHelper(this); 
     applicationContext = getApplicationContext(); 
    } 

    @Override 
    public void onTerminate() { 
     databaseHelper.close(); 
     super.onTerminate(); 
    } 

} 

DatabaseHelper - это только моя конкретная реализация SQLiteOpenHelper.

Определите пользовательский объект приложения в файле манифеста Android.

<application android:name="com.example.MainApplication" ...> 
+0

Прежде всего, спасибо за ваш ответ. Я очень сомневался в этом, и ваш ответ мне очень помог. Также я нашел конкретный пример этого: [ссылка] (http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html) Очень интересная статья. Приветствия – ginobilicl

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