如何在Android中使用新类并保持向后兼容性?

4

我需要在版本9或以上的设备上使用CookieManager类。我的代码看起来很简单,就像这样;

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

当我需要Cookie管理器时,我会调用此方法,并检查操作系统版本;
if (Build.VERSION.SDK_INT >= 9)
  ...

在我的应用程序中,如果版本号为2.2或更低,则此方法从未被调用。我的问题是为什么我看到这个错误日志?


我从你的代码中删除了@TargetApi(9),并在2.1模拟器上运行它,没有任何错误。 - hasanghaforian
@hasanghaforian;它没有抛出异常,但是我提到了这个错误日志。你看到了吗?你调试了应用程序还是只运行了它? - syloc
我在logcat中调试它,没有错误。 - hasanghaforian
1个回答

0
如果我在调用活动的代码中创建一个 HttpUtils 实例并将其放在 SDK 检查之外,我就可以在 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();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接