繁体   English   中英

如何从广播接收器调用 GetAppContext?

[英]How to call GetAppContext from Broadcast Receiver?

我正在尝试设置一个应用程序,我从广播接收器更新数据库,但是当我有它的 class 时,我无法扩展其中有 getAppContext 的 AppCompatActivity,需要数据库调用,我该如何克服它?

 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);
        }
    }

你可以:

1- 创建一个应用程序 class MyApplication 扩展应用程序 class 并将其用作接收器的全局上下文

2-(不保证,您可以尝试)将您在 onReceive 方法中收到的上下文参数转换为 AppCompatActivity 然后调用 getAppContext

提示* 我不推荐在 onReceive 方法中使用数据库代码。 最好再做一个服务或者intentservice,让服务来处理数据库代码。

编辑:

首先在您的主 package 中创建新的 class:

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() 来获取应用程序上下文的地方。

而不是getAppContext()尝试使用如下context

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

上下文已经在这里,足以创建和操作数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM