如何从广播接收器调用 GetAppContext?
How to call GetAppContext from Broadcast Receiver?
我正在尝试设置一个应用程序,我在其中从广播接收器更新数据库,但是当我有 class 时,我无法扩展 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);
}
}
您可以:
1- 创建一个扩展应用程序 class 的应用程序 class MyApplication 并将其用作接收者的全局上下文
2-(不保证,您可以尝试)将您在 onReceive 方法中收到的上下文参数转换为 AppCompatActivity,然后调用 getAppContext
提示* 我不推荐在 onReceive 方法中使用数据库代码。最好再做一个服务或者intentservice,让服务处理数据库代码。
编辑:
首先在你的主包中创建新的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 清单文件中,声明以下内容。
<application android:name="your.package.name.MyApplication">
</application>
现在在您的 onReceive
方法中或您可以调用 MyApplication.getAppContext() 的任何地方来获取您的应用程序上下文。
尝试使用 context
而不是 getAppContext()
,如下所示:
database = Room.databaseBuilder(context, AppDatabase.class, "mydb").
...
Context 已经存在,足以创建和操作数据库。
我正在尝试设置一个应用程序,我在其中从广播接收器更新数据库,但是当我有 class 时,我无法扩展 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);
}
}
您可以:
1- 创建一个扩展应用程序 class 的应用程序 class MyApplication 并将其用作接收者的全局上下文
2-(不保证,您可以尝试)将您在 onReceive 方法中收到的上下文参数转换为 AppCompatActivity,然后调用 getAppContext
提示* 我不推荐在 onReceive 方法中使用数据库代码。最好再做一个服务或者intentservice,让服务处理数据库代码。
编辑:
首先在你的主包中创建新的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 清单文件中,声明以下内容。
<application android:name="your.package.name.MyApplication">
</application>
现在在您的 onReceive
方法中或您可以调用 MyApplication.getAppContext() 的任何地方来获取您的应用程序上下文。
尝试使用 context
而不是 getAppContext()
,如下所示:
database = Room.databaseBuilder(context, AppDatabase.class, "mydb").
...
Context 已经存在,足以创建和操作数据库。