【问题标题】:How can I get the context of the activity which is calling a static function?如何获取调用静态函数的活动的上下文?
【发布时间】:2014-04-01 07:20:53
【问题描述】:

我有一个使用以下库的网络类:Lib Docs 具有 4 个函数来进行获取、发布删除和向服务器发送请求。这是简化版:

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

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

【问题讨论】:

    标签: android android-activity static android-context


    【解决方案1】:

    如果您的方法实际上不需要调用者的特定上下文,您可以通过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" ...>
    

    【讨论】:

    • 但是现在这将能够识别每个活动的上下文吗?因为我需要这个上下文的原因是为了调用 cancelRequests 请参阅:loopj.com/android-async-http/doc/com/loopj/android/http/…, boolean)
    • 啊,我明白了。不幸的是,cancelRequests 正常工作的唯一方法是传入调用者上下文以发出请求并取消它。
    • 谢谢。那我就不得不这样做了。我可以通过以下方式获取活动的特定上下文:ActivityName.this
    • 只要在Activity类的非静态函数中调用就可以了
    【解决方案2】:

    我不这么认为,静态方法中不会存在上下文。唯一的方法是传入一个参数。您可以从意图中获取它,但不是标准的静态方法调用。可能有一个解决方案,但我非常怀疑它。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        相关资源
        最近更新 更多