首页 > 解决方案 > 如何从广播接收器调用 GetAppContext?

问题描述

我正在尝试设置一个应用程序,在其中我从广播接收器更新数据库,但是当我有它的类时,我无法扩展 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);
        }
    }

标签: javaandroidbroadcastreceiver

解决方案


你可以:

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 Manifest 文件中,声明以下内容。

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

</application>

现在在您的onReceive方法或任何地方,您都可以调用 MyApplication.getAppContext() 来获取您的应用程序上下文。


推荐阅读