gpt4 book ai didi

java - MyContentProvider.onCreate() 没有被调用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:21 25 4
gpt4 key购买 nike

未正确调用扩展 ContentProvider 的我的 userDatabase 的 onCreate

这是我的一些 userBatabase 代码:

public class userDatabase extends ContentProvider {

private MainDatabaseHelper mOpenHelper;

public userDatabase(){}

public static final class MainDatabaseHelper extends SQLiteOpenHelper{...}

@Override
public boolean onCreate() {
mOpenHelper = new MainDatabaseHelper(getContext());
return true;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
long id = mOpenHelper.getWritableDatabase().insert("Users", null, values);
return Uri.withAppendedPath(CONTENT_URI, "" + id);
}

...
}

在我的主要 Activity 中,我调用:

userDatabase cpDatabase = new userDatabase();

但是当我尝试调用 cpDatabase.insert(userDatabase.CONTENT_URI, values);

调用 mOpenHelper.getWritableDatabase().insert("Users", null, values); 时,insert 内的一切都崩溃了。

我发现 mOpenHelper.getWritableDatabase() 是问题所在,因为它甚至无法单独运行,然后我发现这是因为 mOpenHelper 为空。

我在构造函数中实例化了 mOpenHelper,所以我认为它没有运行。一些日志消息证实了这一点,当我调用 userDatabase cpDatabase = new userDatabase(); 我的日志消息显示 userDatabase() 构造函数正常运行,但 onCreate 从未运行,因此 mOpenHelper 从未被实例化.

(注意:通过这些日志消息,我注意到当我的应用程序启动时,我的 userDatabase 的构造函数和 onCreate 被调用。我不知道为什么或在哪里。我不明白为什么在我尝试创建一个实例。即使它运行了,mOpenHelper 仍然没有初始化,当我创建一个实例时,构造函数运行但 onCreate 没有。)

可能会发生什么,我怎样才能让我的 onCreate 运行?

最佳答案

由于您使用的是内容提供商,根据 documentation

This method is called for all registered content providers on the application main thread at application launch time

而且您尝试使用内容提供者的方式似乎是错误的,而且,一旦你通过 ContentResolver 发出请求,你不需要手动实例化内容提供者。通过传递 URI,系统检查给定 URI 的权限,并将请求传递给在权限中注册的内容提供者。

例如

getContentResolver().delete(uri, null, null);

uri在哪里,要查询的完整URI。

This教程将指导您正确的方向

关于java - MyContentProvider.onCreate() 没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com