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

时间:2015-11-22 10:40:53

标签: java android broadcastreceiver

我有以下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");

3 个答案:

答案 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扩展BroadcastReceiverBroadcastReceiver不是Context类的子类。所以不可能使用不扩展Service,Activity,FragmentActivity,...作为Context的类的上下文。

BroadcastReceiver onReceive方法中包含两个参数,第一个参数是Context,您也可以将其用作创建Volley请求的Context。像: