2012-08-27 3 views
2

누군가이 문제에 대한 올바른 방향을 제시 할 수 있는지 궁금합니다. 소개 조금 :BlackBerry Connection Transport Descriptors

응용 프로그램에서 우리는 방금 OS 4에 대한 지원을 제거하기 위해 우리의 네트워크 계층을 다시 작성했습니다. 우리는 OS 5에서 제공되는 클리너 ConnectionFactory을 사용하고 있습니다. 우리가 겪고있는 문제는 device- 시뮬레이터와 관련이 없습니다.

연결 또는 두 가지 방법으로 연결이 가능하며 특정 URL을 폴링하고 데이터를 저장하는 데이터 스레드와 '일반 웹보기'(BrowserField)가 있습니다.

지금까지는 데이터 스레드 연결에 문제가없는 것으로 보입니다. 전송 유형을 기반으로하는 URL을 올바르게 작성하고 올바르게 데이터를 다운로드합니다. BrowserField에는 다른 문제가 있습니다. 우리가 BrowserField URL을 열면 "적절한 전송 설명자를 선택할 수 없습니다"라는 메시지가 표시 될 가능성이있는 OS 6 곡선이 있습니다 (다른 OS 6 장치는 없음). 가장 일반적인 범인은 WAP2입니다.

우리는 블랙 베리가 우리가 원했던 것뿐만 아니라 선택하는 전송 기술자도 다루지 않는 것 같지 않다는 생각이 든다. 누구든지 추천 사항이 있습니까? https://gist.github.com/3490101

데이터 스레드에 의해 사용되는 가장 일반적인 연결 형태,하는 GET을 수행하고 응답을 캐시하는 getUrlAsString(String etag) 기능이다 : 그것의 길이에

, 나는 요점에 우리의 연결 유틸리티 클래스를 게시 한 etag/url을 기반으로합니다.

BrowserField에 대한 URL을 작성하려면 buildURLTransport(String url) 함수를 사용합니다.이 함수는 URL에서 연결을 가져와 전송 정보를 결정하고 작성된 URL을 반환합니다.

TL; DR : 우리가 디버깅 보일 수없는 BrowserField에서 괴짜가있다, 우리는 눈의 새로운 세트를 감사하겠습니다 : 우리는 buildURLTransport(String url) 함수에서 위의 게시 요지에 뭔가 문제가 있다고 생각.

미리 감사드립니다.

답변

4

getUrlAsString은 스레드로부터 안전하지 않으므로 코드에주의하십시오. 나는 왜 당신이 왜 ConnectionFactory에 대한 참조를 유지하는지 이해하지 못한다.

내가 왜 buildUrlTransport 메서드가 필요한지 이해하지 못했습니다. BrowserFieldConfig과 함께 ConnectionFactoryBrowserField으로 사용하지 않는 이유는 here입니다.

그래서 ConnectionFactory 중 하나를 인스턴스화하고 특정 매개 변수로 구성한 다음 모든 곳에서 사용하십시오. 환경 설정이 변경된 경우 ConnectionFactory을 새로 만들고 BrowserFieldConfig을 업데이트합니다. 물론이 코드는 스레드로부터 안전해야합니다.

또한 일관성을 유지하십시오. 가끔씩 빠른 연결 확인을 사용하는 경우가 있습니다.

+0

감사합니다. 내일은 조정을 게시하고 답변을 수락합니다. 정리 제안 주셔서 감사합니다! 구성 변경으로 인해 장치의 연결이 변경된 것입니까? 예 : WiFi를 사용할 수없고 MDS로 전환하면 새 연결 팩토리가 필요합니까? 아니면 사용 가능한 전송이 발견 될 때까지 보류 된 참조가 다시 시도됩니까? – jlindenbaum

+0

설정에서 원하는 전송을 설정했는지 확인했습니다.{WiFi, BIS-B, MDS, WAP2, DirectTCP}와 같은 목록을 설정할 수 있습니다. 이 경우 ConnectionFactory가 자체를 전환하는 작업을 수행하도록 구성 할 필요가 없습니다. –

+0

답변에 동의하십시오. 그러나 때로는 'ConnectionFactory' 전송 유형 선택이 예상대로 작동하지 않습니다. 특히 부분적으로 구성된 Wi-Fi 네트워크의 경우. –