Как позвонить в GetAppContext из приемника вещания? - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь настроить приложение, в котором я обновляю базу данных от широковещательного приемника, но когда у меня есть ее класс, я не могу расширить AppCompatActivity, в которой есть getAppContext, необходимый для вызова базы данных, как я могу получитьнад ним?

 public class AlarmReceiver extends BroadcastReceiver {

public static AppDatabase database;

@Override
public void onReceive(Context context, Intent intent) {
            database = Room.databaseBuilder(getAppContext(), AppDatabase.class, "mydb").
//get app context is red there, "cant resolve method"

                    allowMainThreadQueries().

                    build();

            UserDAO userDAO = database.getUserDAO();
            User user1 = new User();
            user1.setId(2);
            user1.setName("xDDDD");
            user1.setPassword("1234");
            userDAO.insert(user1);
        }
    }

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вы можете:

1- Создать класс приложения MyApplication, расширяющий класс приложения, и использовать его в качестве глобального контекста для получателя.

2- (не гарантировано, вы можете попробовать)параметр контекста, который вы получаете в методе onReceive для AppCompatActivity, затем вызывает getAppContext

Подсказка * Я не рекомендую код базы данных внутри метода onReceive. Лучше создать другую службу или службу intentservice и позволить службе обрабатывать код базы данных.

Редактировать:

Сначала создать новый класс в основном пакете:

public class MyApplication extends Application {

    private static Context context;

    public void onCreate() {
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return MyApplication.context;
    }
}

Затем в файле манифеста Android объявите следующее.

<application android:name="your.package.name.MyApplication">

</application>

Теперь в вашем методе onReceive или в любом другом месте вы можете вызвать MyApplication.getAppContext (), чтобы получить контекст вашего приложения.

0 голосов
/ 16 октября 2019

Вместо getAppContext() попробуйте context, как показано ниже:

database = Room.databaseBuilder(context, AppDatabase.class, "mydb").
...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...