2012-02-06 4 views
0

URL을 호출하고 내 Blackberry App에서 URL의 응답 데이터를 가져오고 싶습니다. 이를 위해 HttpConnection을 사용하고 있습니다.시뮬레이터에서 실행되는 Blackberry HttpConnection prob

import net.rim.device.api.ui.container.MainScreen; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.Dialog; 

import javax.microedition.io.Connector; 
import javax.microedition.io.ContentConnection; 
import javax.microedition.io.HttpConnection; 
import java.io.DataInputStream; 
import java.io.IOException; 

public class TestApp extends UiApplication { 

    private MainScreen _mainScreen; 

    private static TestApp _app; 

    public TestApp(){ 
     _mainScreen = new MainScreen(); 

     LabelField testField = new LabelField("hello world"); 

     _mainScreen.add(testField); 

     pushScreen(_mainScreen); 

     HttpConnection c = null; 
     DataInputStream dis = null; 

     try { 
     System.out.println("0"); 
     c = (HttpConnection)Connector.open("http://www.google.com"); 

     System.out.println("1"); 
     int rc = c.getResponseCode(); 
     System.out.println("2"); 
     if (rc != HttpConnection.HTTP_OK) { 
      throw new IOException("HTTP response code: " + rc); 
     } 
     System.out.println("3"); 
     dis = c.openDataInputStream(); 
     System.out.println("4"); 
     int len = (int)c.getLength(); 
     if (len > 0) { 
      byte[] data = new byte[len]; 
      dis.readFully(data); 
     } else { 
      int ch; 
      while ((ch = dis.read()) != -1) { 
       //... 
      } 
     } 
     } catch(Exception e){ 
      e.printStackTrace(); 
     }finally { 

      try { 
       if (dis != null) 
        dis.close(); 
       if (c != null) 
        c.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      catch(NullPointerException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 

    public static void main(String[] args) { 
     _app = new TestApp(); 
     _app.enterEventDispatcher(); 

    } 
} 

내가 시뮬레이터의 코드를 실행하려고, 나는 점점 후 '1'과 '스택 트레이스'오랜 시간이 지나면 그 이후 '0'하고있다가 나타나는 : 여기에 내가 사용하고있는 코드는 디버그 창에 표시되고 텍스트가 나타나 자마자 텍스트가있는 레벨 앱이 시뮬레이터 화면에 표시됩니다. 시뮬레이터의 인터넷 연결에는 문제가 없습니다. Wi-Fi를 설정했고 브라우저에서 웹 사이트를 열 수 있는지 테스트했습니다. 내 코드의 문제점은 무엇입니까?

답변

1

MDS는 인터넷 액세스를 위해 시작해야하며 시뮬레이터와 데스크톱 인터넷 연결 간의 인터페이스로 작동합니다. 당신이 정상 GPRS 다음 팩이있는 경우

2

BlackBerry 인프라에서 네트워킹에 대해 읽어 보는 것이 좋습니다. BlackBerry 설명서를 살펴보십시오.

코드가 신속하게 작동하도록하려면 요청한 URL에 "- interface = wifi"라는 ​​접미사를 추가하면 Wi-Fi 또는 "; deviceside = false"를 통해 무선으로 연결할 수 있습니다. 그래서 귀하의 orignal url은 "http : //www.google.com; deviceside = false"또는 "http : //www.google.com; interface = wifi"가됩니다.

2

화면을 표시 한 다음 연결을 수행하는 작업자 스레드를 생성해야합니다. 어쨌든, OS> 5.0에서 ConnectionFactory을 사용하여 이전 버전에서이를 관리하는 데 필요한 "접미사"를 피하십시오. 또한 실패한 연결은 일반적으로 시간 초과에 2 분이 걸립니다.

+1

정말로 HTTP 패치를 별도의 스레드에서 실행해야합니다 (어쩌면). 당신이하고있는 일은 getResponseCode()가 돌아 오기를 기다리면서 이벤트 스레드 (그리고 OS)가 블록하는 것을 야기하는 것입니다. 운영 체제를 차단 한 이후로 절대로 실행되지 않을 수 있습니다. – Richard

0

당신이 블랙 베리 URL에 열린 HTTP 연결이 가 "http://www.google.com"이 도 연결을 포함해야합니다 통해 UR URL의 형식이 될 suffix.so 때 "http://www.google.com"+connectionsuffix

귀하의 URL이 될 "http://www.google.com"+ "; devicesides = true"

관련 문제