2011-11-17 2 views
0

내 요구 사항은 응용 프로그램 시작 지점에서 두 개의 URL을 구문 분석하는 것입니다.이 두 URL은 응용 프로그램에 표시해야하는 데이터가 있습니다. 배열에 두 개의 URL을 유지하고 백그라운드 스레드에서 for 루프를 실행 한 다음 백그라운드 스레드의 데이터베이스에 값을 삽입하여 문제를 해결하는 올바른 방법입니까?응용 프로그램 시작시 다중 URL 실행

하는 나는 어떤 종류의 도움을 환영합니다 :) 어떤 종류의

public StartConnecton(SplashScreen splashScreen) 
{ 
    urls = new String[2]; 
    urls[0] = "http:xxxxxx.com"; 
    urls[1] = "http:yyy.com"; 
    _dbIRef = new ClassDatabase(1); 
    _dbIRef.setSID(46); 
    _splashScreen = (SplashScreen)splashScreen; 
    _classDatabase = new ClassDatabase(); 

} 

public void run() 
{ 
    int size = urls.length; 
    for(int i = 0; i < size;i++) 
    { 
     if(i==0) 
     { 
      _id= 1; 
     }else if(i==1) 
     { 
      _id = 0; 
     } 

try{ 
    String conn = this.getConnectionString(); 
     con = (HttpConnection)Connector.open(urls[i]+getConnectionString()); 
     con.setRequestMethod(HttpConnection.GET); 
     con.setRequestProperty("User-Agent","Profile/MIDP-1.0 Confirguration/CLDC-  1.0"); 
System.out.println("CONNECTION!!!!!!!!!!!"+con); 
     code = con.getResponseCode(); 

System.out.println("CODE!!!!!!!!!!!"+code+"ID"+_id);   
if (code == HttpConnection.HTTP_OK) 
     { 
      is = con.openInputStream(); 
      int length = (int) con.getLength(); 
      new Parser(is,_id); 
      is.close(); 
      con.close(); 
     } 
    }catch(Exception e) 
    { 

System.out.println("EXCEPTION!!!!!!!!!!"+e); 
    } 
    } 
    _classDatabase.delete("Delete from topnews where sid = 46"); 
    _classDatabase.insertTopNews(); 
    _classDatabase.insertTabBar(); 
    _classDatabase.insertGalleryInfo(); 

    _topNewsScreen = new TopNewsScreen("TopNews"); 
    _splashScreen.swapScreen(_topNewsScreen); 



} 

도움말

을 환영, 아래에있는 내 코드를 게시 한

AY

+0

'RequestMethod'가'GET' 일 때 url은'www.site.com? variable = value'와 같은 것을 포함해야한다고 생각합니다. – pheromix

+0

예, URL을 노출 할 수 없으므로 나는 무언가를 지키지 만 걱정은 없습니다. 내가하는 일에서 내가 옳은가? 여러 URL을 호출하는 올바른 방법입니까? – ayachama

+0

멀티 스레딩 개념을 알고 있다면 그렇게하는 것이 쉽습니다. – alishaik786

답변

2

당신이 지금 가지고있는 문제는 다음과 같습니다 :

1. 연결은 순차적으로으로 인스턴스화됩니다. 첫 번째 연결이 실패한 경우 (서버가 없거나 BlackBerry MDS 서버가 다운 된 경우 등) 두 번째 연결을 시도하기 전에 connection.open 요청이 시간 초과되기까지 약 30 초 동안 기다려야합니다.

2. 연결 시도 중에 UI가 고정됩니다.. 나는 이벤트 스레드에서이 작업을 수행하고있는 것으로 추측합니다. 즉,이 메서드가 차단되어 있기 때문에 Connection.open이 실행되는 동안 앱이 고정됩니다.

위의 두 가지 문제에 대한 해결책은 각 연결 시도를 별도의 스레드로 래핑하는 것입니다. http://mnarinsky.blogspot.com/2011/03/blackberry-sending-http-request-in.html

3. 중복 코드 코드의 if(i==0) 블록이 무엇을하고 있는지 : 여기에 좋은 예입니다? i == 0 일 때 _id = 1로 만들고 싶다면 _id = (i==0) ? 1 : 0;을 작성하십시오. 또는 URL을 배열에 넣고 i를 사용하는 순서를 뒤집고 _id 변수를 완전히 제거하십시오.

+0

귀하의 회신 donturner 주셔서 감사합니다, 나는 이벤트 스레드에서 이것을 수행하지 오전, 내가 별도의 스레드 에서이 일을 오전, 그 블로그를 참조 할 것입니다, 링크 덕분에, 그리고 그 코드를 변경합니다 :) – ayachama

관련 문제