【问题标题】:onCreate() in ContentProvider is not being called未调用 ContentProvider 中的 onCreate()
【发布时间】:2013-04-20 05:19:00
【问题描述】:

ContentProvider 中的onCreate() 方法未被调用。虽然当我单击一个按钮时,它会进入insert() 方法并返回java.lang.NullPointerException。在onCreate() 方法中我只有

@Override
public boolean onCreate() {
        Log.v(TAG,"Inside create provider");
        database = new DatabaseSQLiteMyDB(getContext());
        return false;
}

日志 CAT 显示:

04-20 01:23:00.543: V/CLICKED(1607): CLICKED
04-20 01:23:00.553: V/Provider(1607): inside insert
04-20 01:23:00.573: V/database(1607): created
04-20 01:23:00.573: E/pkg.OnPut_ClickListener(1607): java.lang.NullPointerException
04-20 01:23:00.583: V/pkg.OnPut_ClickListener(1607): In exception code

在清单中:

<provider android:name="somepkg.CustomContentProvider"
            android:authorities="somepkg.provider" />

在点击创建 URI 时:

{
    myURI=buildUri("content", "somepkg.provider");
            this.putNo=putNo;
            mContentValues = initTestValues();
    }
        private Uri buildUri(String scheme, String authority) {
            Uri.Builder uriBuilder = new Uri.Builder();
            uriBuilder.authority(authority);
            uriBuilder.scheme(scheme);
            return uriBuilder.build();
        }

【问题讨论】:

  • 请发布更多代码和 logcat 的完整堆栈跟踪
  • @sattu 请发布完整的堆栈跟踪和更多代码

标签: android android-contentprovider oncreate


【解决方案1】:

您需要显示执行插入的代码。

抱歉,本文的其余部分并非直接针对问题,但这是我在有关 ContentProviders 的代码示例中随处可见的内容。

您不应在 ContentProvider onCreate 中调用 database = new DatabaseSQLiteMyDB(getContext());。这是因为 SQLiteOpenHelper 文档中针对 getReadableDatabase 和 getWritableDatabase 给出的原因:

和getWritableDatabase一样,这个方法可能需要很长时间才能返回, 所以你不应该从应用程序主线程调用它,包括 来自 ContentProvider.onCreate()。

改为保留对 SQLiteOpenHelper 实例的引用,并在查询/插入/删除/更新方法中酌情调用 getWritableDatabase/getReadableDatabase,如果您使用的是 Loaders,这些方法将被异步调用。

【讨论】:

  • 你的帖子对我来说没有意义。您说不要在onCreate 中实例化SQLiteOpenHelper,然后引用getWritableDatabase/getReadableDatabase 的文档作为您的证据。文档描述了可能长时间运行的数据库创建被推迟到第一次使用,实际上说“如果你使用的是 SQLite 数据库,你可以在 ContentProvider.onCreate() 中创建一个新的 SQLiteOpenHelper 对象”developer.android.com/guide/topics/providers/…
猜你喜欢
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
相关资源
最近更新 更多