我正在构建一个Android应用程序,它从设备中收集所有联系信息(我相信,通过SQLite)。不幸的是,我需要一些来自互联网的额外信息,我想存储在提到的数据库中,以便能够在下次用户打开我的应用程序时查询(由我提供),所以即使没有网络连接,他也可以使用它。 我使用内容提供商获取联系方式。
完成此任务的最有效和相对简单的方法是什么?
答案 0 :(得分:1)
您需要的是创建自己的内容提供商 - 使用SQLite作为您的存储技术。您需要创建一个扩展SQLiteOpenHelper
的类 - 为onCreate(Database database)
提供实现,并在那里指定SQL查询以根据需要创建表。例如:
public class YourDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "yourDB.db";
private static final int DATABASE_VERSION = 1;
public YourDBHelper (Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
//here you write the code to create the table as you desire:
String query = "CREATE TABLE MoreContactInfo <your columns def>...";
database.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
//do the upgrade (e.g drop and create table)
}
}
现在要实现内容提供程序,请扩展ContentProvider
类:
public class YourContentProvider extends ContentProvider
。
在YourContentProvider
类的onCreate回调中,您实例化了SQLite-helper(即YourDBHelper
):请参阅下面的示例:
...
private YourDBHelper yourDatabase = null;
@Override
public boolean onCreate() {
yourDatabase = new YourDBHelper(getContext());
return false;
}
要插入数据,请覆盖插入方法,如下所示:
@Override
public Uri insert(Uri uri, ContentValues values) {
//ideally you use URI-Matcher to figure out who to treat the insert
SQLiteDatabase sqlDB = yourDatabase.getWritableDatabase();
long id = sqlDB.insert("<your-table-name-here>", null, values);
return Uri.parse("<your-content-provider-base-uri"> +"/"+id);
}
我知道这可能看起来很多,但我认为这是您需要做的,以便拥有自己的内容提供商,以便您在Android应用中以标准方式保存和检索数据。 如果您有兴趣,我会有代码漫游演示文稿here。