SQLiteOpenHelper,Multiples Tables和ContentProvider

时间:2013-10-04 01:13:35

标签: android sqliteopenhelper

我正在尝试在网络服务器和Android应用之间同步数据。所以,我正在遵循这个好建议:Sync data between Android App and webserver

现在,我实际上是在做Content Provider的第一部分工作。为此,我找到了本教程: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之间共享的数据库?

我希望你能帮助我 谢谢你的建议

1 个答案:

答案 0 :(得分:0)

每个资源应该有一个不同的内容提供者,但是使用一个sqlliteopenhelper(1个数据库)。

有几种方法可以做到这一点。我在我的应用程序(http://developer.android.com/reference/android/app/Application.html)中使用自定义Application对象做了什么(可能不是最好的),它有访问对象的方法我想成为一个也需要上下文的单例。它可能不是最好的方式,但它对我有用。

e.g。

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" ...>