ContentResolver AndroidX IllegalArgumentException Не может предоставить нулевой контекст для базы данных - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь получить данные от поставщика содержимого приложения A.

Поставщик содержимого определен в приложении A следующим образом

    <provider
        android:name=".db.BDataProvider"
        android:authorities="com.example.test.db.provider"
        android:exported="true"
        android:multiprocess="true"
        android:readPermission="android.permission.permRead" />

Теперь в приложении B я пытаюсь прочесть данные следующим образом 1014 *

java .lang.IllegalArgumentException: не может предоставить нулевой контекст для базы данных.

2020-05-07 23:50:14.030 4294-4402/com.example.test D/ActivityThread: Loading provider com.example.test.db.provider: com.example.test.db.provider.BDataProvider
2020-05-07 23:51:36.017 4294-4402/com.example.test W/System.err: java.lang.IllegalArgumentException: Cannot provide null context for the database.
2020-05-07 23:51:36.019 4294-4402/com.example.test W/System.err:     at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:600)
2020-05-07 23:51:36.019 4294-4402/com.example.test W/System.err:     at com.example.test.db.BDatabase.getInstance(BDatabase.java:15)
2020-05-07 23:51:36.020 4294-4402/com.example.test W/System.err:     at com.example.test.db.BDataProvider.query(BDataProvider.java:42)
2020-05-07 23:51:36.021 4294-4402/com.example.test W/System.err:     at android.content.ContentProvider.query(ContentProvider.java:1057)
2020-05-07 23:51:36.021 4294-4402/com.example.test W/System.err:     at android.content.ContentProvider.query(ContentProvider.java:1149)
2020-05-07 23:51:36.022 4294-4402/com.example.test W/System.err:     at android.content.ContentProvider$Transport.query(ContentProvider.java:241)
2020-05-07 23:51:36.023 4294-4402/com.example.test W/System.err:     at android.content.ContentResolver.query(ContentResolver.java:757)
2020-05-07 23:51:36.024 4294-4402/com.example.test W/System.err:     at android.content.ContentResolver.query(ContentResolver.java:706)
2020-05-07 23:51:36.025 4294-4402/com.example.test W/System.err:     at android.content.ContentResolver.query(ContentResolver.java:664)
2020-05-07 23:51:36.025 4294-4402/com.example.test W/System.err:     at com.example.test.ui.MainActivity$2.run(MainActivity.java:313)
2020-05-07 23:51:36.027 4294-4402/com.example.test W/System.err:     at java.lang.Thread.run(Thread.java:764)

Теперь начинается странная часть, выше код работает в проекте, основанном на appcompatv7, но дает указанную выше ошибку в новом проекте, созданном с зависимостями androidX .

1 Ответ

0 голосов
/ 07 мая 2020

Как я уже упоминал в вопросе, указанный код работает в проектах pre-androidX.

Мне удалось получить исправление / обходной путь.

В приложении A класс базы данных, который расширяется RoomDatabase Я использовал context.getApplicationContext ()

public static synchronized BDatabase getInstance(Context context) {
        if (dbInstance == null) {
            dbInstance = Room.databaseBuilder(context.getApplicationContext(), BDatabase .class, DBConstants.DATABASE_NAME).build();
        }
        return dbInstance;
    }
}

, заменив его на простой context , чтобы устранить проблему. Да, context.getApplicationContext () изначально не имел смысла.

dbInstance = Room.databaseBuilder(context, BDatabase .class, DBConstants.DATABASE_NAME).build();

{ ссылка }

...