如何在android中向后兼容的同时使用新类?

时间:2012-09-15 15:17:20

标签: java android backwards-compatibility

我需要将CookieManager类用于版本为9或更高版本的设备。我的代码看起来像这样;

public class HttpUtils {
private static CookieManager cookie_manager = null;

@TargetApi(9)
    public static CookieManager getCookieManager() {
        if (cookie_manager == null) {
            cookie_manager = new CookieManager();
            CookieHandler.setDefault(cookie_manager);
        }
        return cookie_manager;
    }
}

当我在2.2模拟器上运行时;我有这个错误日志;

Could not find class 'java.net.CookieManager', referenced from method com.application.utils.HttpUtils.getCookieManager

当我需要CookieManager时,我会通过检查os版本来调用此方法;

if (Build.VERSION.SDK_INT >= 9)
  ...

因此;在我的应用程序中,如果版本是2.2或更低;永远不会调用此方法。我的问题是为什么我看到这个错误日志?

1 个答案:

答案 0 :(得分:0)

如果我在SDK检查之外的调用Activity的代码中创建一个HttpUtils实例,我可以在2.2模拟器上复制它。例如:

HttpUtils utils = new HttpUtils();

if (Build.VERSION.SDK_INT >= 9)
{
    Object test = utils.getCookieManager();
}

如果我改为直接调用静态方法,则不会发生:

if (Build.VERSION.SDK_INT >= 9)
{
    Object test = HttpUtils.getCookieManager();
}

如果您的HttpUtils类中有其他非静态内容,则必须将CookieManager部分移动到另一个辅助类,并且只能静态调用它...或者在SDK检查后实例化HtppUtils:

    if (Build.VERSION.SDK_INT >= 9)
    {
        HttpUtils utils = new HttpUtils();
        Object test = utils.getCookieManager();
    }