我有以下android代码段
public class Alarm extends BroadcastReceiver
{
public void makeQuery(String symbol) {
RequestQueue queue = Volley.newRequestQueue(Alarm.this);
....
我试图从我的主要活动中拨打makeQuery
。但是,在编译期间,我收到以下错误:
actual argument Alarm cannot be converted to Context by method invocation conversion
据我所知,当前对象无法转换为context
Volley
显然需要。这是BroadcastReceiver
的财产吗? this
- 变量只能转换为特殊类的context
吗?我应该将此函数makeQuery
移到另一个类吗?
我初步对解释而不是解决方案感兴趣!
另外:当前设置仅用于测试目的。稍后从Alarm
类本身调用该方法!然后没有主要活动!我需要一个解决方案才能使它工作!
MainActivity.java
:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Alarm alarm = new Alarm();
alarm.makeQuery("Test");
答案 0 :(得分:4)
使用应用程序的上下文,以避免在有人通过时将活动或广播接收器泄露:
public class Alarm extends BroadcastReceiver
{
private Context mContext;
public Alarm() {}
public Alarm(Context context) {
mContext = context;
}
public void makeQuery(String symbol) {
RequestQueue queue = Volley.newRequestQueue(mContext.getApplicationContext());
}
....
}
RequestQueue
需要活动或应用上下文:
<强> MainActivity.java 强>
Alarm alarm = new Alarm(this); // Pass in the Activity's context
alarm.makeQuery("Test");
答案 1 :(得分:1)
BroadcastReceiver
的 Context
未继承,因此您无法将Alarm
类用作上下文。
您可以使用活动上下文:
public void makeQuery(Context context, String symbol) {
RequestQueue queue = Volley.newRequestQueue(context);
....
}
来自活动:
Alarm alarm = new Alarm();
alarm.makeQuery(MainActivity.this, "Test");
答案 2 :(得分:1)
下面:
RequestQueue queue = Volley.newRequestQueue(Alarm.this);
Alarm
扩展BroadcastReceiver
但BroadcastReceiver
不是Context
类的子类。所以不可能使用不扩展Service,Activity,FragmentActivity,...作为Context的类的上下文。
在BroadcastReceiver
onReceive
方法中包含两个参数,第一个参数是Context,您也可以将其用作创建Volley请求的Context。像: