2

我正在尝试在网络服务器和 android 应用程序之间同步数据。所以,我遵循这个很好的建议:在 Android 应用程序和网络服务器之间同步数据

现在,我实际上是在做内容提供者的第一部分。为此,我找到了本教程: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);
}
}

所以,我开始做一些研究,我发现:数据库中的每个表是否应该有一个 SQLiteOpenHelper? 特别是这个链接: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 之间共享的数据库?

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

4

1 回答 1

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" ...>
于 2013-10-04T01:50:43.147 回答