Java 如何在android中获取类中的当前上下文?

Java 如何在android中获取类中的当前上下文?,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,我有以下android代码片段 public class Alarm extends BroadcastReceiver { public void makeQuery(String symbol) { RequestQueue queue = Volley.newRequestQueue(Alarm.this); .... 我正试图从我的主要活动调用makeQuery。但是,在编译过程中,我得到以下错误: actual argument Alar

我有以下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
我知道当前对象无法转换为
上下文
,这显然是
凌空
所需要的。这是
BroadcastReceiver
的属性吗?对于特殊类,
-变量只能转换为
上下文
?我是否应该将此函数
makeQuery
移动到另一个类中

我对解释而不是解决方案感兴趣

此外:当前设置仅用于测试目的。稍后将从
报警
类本身中调用该方法!那就没有主要的活动了!我需要一个解决方案,使它的工作,然后

MainActivity.java

public class MainActivity extends AppCompatActivity {    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Alarm alarm = new Alarm();
        alarm.makeQuery("Test");

BroadcastReceiver
不继承
上下文,因此不能将
报警
类用作上下文

您可以使用活动上下文:

public void makeQuery(Context context, String symbol) {   
        RequestQueue queue = Volley.newRequestQueue(context);
        ....
}
从活动中:

Alarm alarm = new Alarm();
alarm.makeQuery(MainActivity.this, "Test");

BroadcastReceiver
不继承
上下文,因此不能将
报警
类用作上下文

您可以使用活动上下文:

public void makeQuery(Context context, String symbol) {   
        RequestQueue queue = Volley.newRequestQueue(context);
        ....
}
从活动中:

Alarm alarm = new Alarm();
alarm.makeQuery(MainActivity.this, "Test");

使用应用程序的上下文,避免在有人进入时泄漏活动或广播接收器:

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

使用应用程序的上下文,避免在有人进入时泄漏活动或广播接收器:

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");
在这里:

报警
扩展
广播接收器
广播接收器
不是
上下文
类的子类。因此,不可能使用不扩展服务、活动、碎片活动等的类上下文,。。。作为上下文

BroadcastReceiver
onReceive
中,方法包含两个参数第一个参数是上下文,您也可以将其用作创建截击请求的上下文。比如:

这里:

报警
扩展
广播接收器
广播接收器
不是
上下文
类的子类。因此,不可能使用不扩展服务、活动、碎片活动等的类上下文,。。。作为上下文



BroadcastReceiver
onReceive
中,方法包含两个参数第一个参数是上下文,您也可以将其用作创建截击请求的上下文。例如:

在您实际从MainActivity调用
makeQuery
方法的地方发布代码。我在问题中更新了此代码,在您实际从MainActivity调用
makeQuery
方法的地方发布代码。我在问题中更新了此代码,但这是为什么?我更感兴趣的是为什么?BroadcastReceiver没有上下文吗?活动继承上下文,而BroadcastReceiver没有,所以您可以将活动强制转换为上下文而不是BroadcastReceiver。但这是为什么?我更感兴趣的是为什么?BroadcastReceiver没有上下文吗?活动继承上下文,而BroadcastReceiver没有,因此您可以将活动强制转换为上下文而不是BroadcastReceiver。从主活动调用方法仅用于测试目的。我计划稍后从Alarm类本身调用此方法!那我就没有背景了,你的建议不管用!好吧,这个类迟早会被实例化,对吧?但是现在我在运行过程中遇到一个错误:“Alarm没有零参数构造函数”,在尝试添加无参数构造函数时:
public Alarm(){}
是的,当然!在再次阅读错误之后,我也想到了这个。我只是希望,该类永远不会在没有参数的情况下实例化和使用,因为上下文将为null…从主活动调用该方法只是为了测试目的。我计划稍后从Alarm类本身调用此方法!那我就没有背景了,你的建议不管用!好吧,这个类迟早会被实例化,对吧?但是现在我在运行过程中遇到一个错误:“Alarm没有零参数构造函数”,在尝试添加无参数构造函数时:
public Alarm(){}
是的,当然!在再次阅读错误之后,我也想到了这个。我只是希望,这个类永远不会在没有参数的情况下被实例化和使用,因为上下文将是空的……最后是一个有意义的解释!Thanks@Alex:我的问题是为什么要在Alarm类中扩展
BroadcastReceiver
?我遵循了这里给出的一个示例(后面的想法是,此方法是通过服务设置的此Alarm类调用的):最后是一个有意义的解释!Thanks@Alex:我的问题是为什么要在Alarm类中扩展
BroadcastReceiver
?我遵循了这里给出的一个示例(后面的想法是使用此Alarm类调用此方法,由服务设置):