2012-09-15 1 views
4

Мне нужно использовать класс CookieManager для устройств с версией 9 или выше. Мой код просто выглядит так:Как работать с новыми классами, будучи обратно совместимыми в Android?

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) 
    ... 

So; в моем приложении, если версия 2.2 или ниже; этот метод никогда не называется. Мой вопрос: почему я вижу этот журнал ошибок?

+0

Я удалить '@TargetApi (9)' из вашего кода и запустить его на 2.1 эмулятора, и работает без ошибок. – hasanghaforian

+0

@hasanghaforian; он не генерирует исключение, но есть этот журнал ошибок, о котором я упоминал. Вы видели это? И вы отлаживали приложение или просто запускали его? – syloc

+0

Я отлаживал его без ошибок в logcat. – hasanghaforian

ответ

0

Я могу реплицировать это на эмулятор 2.2, если я создам экземпляр HttpUtils в коде вызывающей активности за пределами проверки SDK. Например:

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 часть к другому вспомогательному классу и только называем его статический ... или инстанцирования HtppUtils после проверки SDK:

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