我正在尝试在网络服务器和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之间共享的数据库?
我希望你能帮助我 谢谢你的建议
答案 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" ...>