如何获取调用静态函数的活动的上下文?

时间:2014-04-01 07:20:54

标签: android android-activity static android-context

我有一个网络类,它使用以下lib:Lib Docs和4个函数来对服务器进行get,post delete和put请求。这是简化版本:

 public static void get(Context context, String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {          
    httpClient.get(context, getAbsoluteUrl(url), params, responseHandler);
} 

现在不必通过参数传递上下文,有没有办法在某些方法中获取调用活动的上下文?

有些事情如下:

public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
    Context context = getCallignActivtyCntext() // <====== some thing like this
    httpClient.get(context, getAbsoluteUrl(url), params, responseHandler);
}

我需要特定上下文的原因是因为我必须在销毁活动时取消所有网络请求,并按上下文对所有请求进行分组或识别。

4 个答案:

答案 0 :(得分:2)

如果您实际上不需要方法的调用者的特定上下文,您可以通过getApplicationContext()

使用应用程序上下文

要静态访问您的应用程序上下文,您可以执行以下操作:

public class CustomApplication extends Application{

    private static Context context;

    public void onCreate(){
        super.onCreate();
        this.context = getApplicationContext();
    }

    public static Context getContext() {
        return instance;
    }
}

然后在您的清单中声明您的应用程序名称以匹配您的自定义类

<application android:name="com.path.to.class.CustomApplication" ...>

答案 1 :(得分:0)

我不相信,静态方法中不存在任何上下文。唯一的方法是传入一个参数。你可以从一个intent获得它,但不是标准的静态方法调用。可能有解决方案,但我对此表示高度怀疑。

答案 2 :(得分:0)

虽然通过检查堆栈跟踪可以实现这一点,但这肯定比传递上下文更复杂。

没有更简单的解决方案。此外,出于安全原因,不建议获取方法的调用方。

答案 3 :(得分:0)

请参考以下链接:

Static way to get 'Context' on Android?

在这个链接中,有一种方法,但不是100%完美。